如何在Angular5中正确初始化对象



我正在尝试使用动态表单方法创建问卷服务。因此,我有询问基础,然后我有询问textbox,Question-Dropdwon等。

然后,我决定创建一个问卷对象,其中包含一系列问题和信息,例如ID,海报等。

但是,当我调用add((函数时。Service.ts,它说没有定义问卷。

我猜我的问题是我是否成功地在问卷调查中做了一个问卷调查实例?还是我在质疑中错误地指的是service.ts?

Question-Base.ts

export class QuestionBase<T>{
  value: T;
  key: string;
  label: string;
  required: boolean;
  order: number;
  controlType: string;
  constructor(options: {
      value?: T,
      key?: string,
      label?: string,
      required?: boolean,
      order?: number,
      controlType?: string
    } = {}) {
    this.value = options.value;
    this.key = options.key || '';
    this.label = options.label || '';
    this.required = !!options.required;
    this.order = options.order === undefined ? 1 : options.order;
    this.controlType = options.controlType || '';
  }
}

Question-Textbox.ts

import { QuestionBase } from './question-base';
export class TextboxQuestion extends QuestionBase<string> {
  controlType = 'textbox';
  type: string;
  constructor(options: {} = {}) {
    super(options);
    this.type = options['type'] || '';
  }
}

Question.service.ts

// this is where form consumes external data
import { Injectable }       from '@angular/core';
import { DropdownQuestion } from './question-dropdown';
import { QuestionBase }     from './question-base';
import { TextboxQuestion }  from './question-textbox';
import { QuestionnaireObj } from './questionnaireObj';

@Injectable()
export class QuestionService {
  // Todo: get from a remote source of question metadata
  // Todo: make asynchronous
  // const newQuestion = new TextboxQuestion() {
// constructor(){}

  add(){
    let newQuestion: QuestionBase<any>[] = [
      new DropdownQuestion({
        key: 'yes',
        label: 'Bravery Rating',
        options: [
          {key: 'solid',  value: 'Solid'},
          {key: 'great',  value: 'Great'},
          {key: 'good',   value: 'Good'},
          {key: 'unproven', value: 'Unproven'}
        ],
        order: 3
      })
    ]
    console.log("newQuestion is" + newQuestion);
    // QuestionService.questionList.append(newQuestion);
    console.log(questionnaireobj);

  }

  getQuestions() {
    let questions: QuestionBase<any>[] = [
      new DropdownQuestion({
        key: 'brave',
        label: 'Bravery Rating',
        options: [
          {key: 'solid',  value: 'Solid'},
          {key: 'great',  value: 'Great'},
          {key: 'good',   value: 'Good'},
          {key: 'unproven', value: 'Unproven'}
        ],
        order: 3
      }),
      new TextboxQuestion({
        key: 'firstName',
        label: 'First name',
        value: 'Bombasto',
        required: true,
        order: 1
      }),
      new TextboxQuestion({
        key: 'emailAddress',
        label: 'Email',
        type: 'email',
        order: 2
      })
    ];
    return questions.sort((a, b) => a.order - b.order);
    // console.log(questions);
  }
}

问卷obj.ts

import { DropdownQuestion } from './question-dropdown';
import { QuestionBase }     from './question-base';
import { TextboxQuestion }  from './question-textbox';
import { Injectable }       from '@angular/core';

@Injectable()
export class QuestionnaireObj {
// public questionnaireId?: number;
// public questionList?: QuestionBase<any>[];

// declare the fields and init
constructor(public questionnaireId?:number, public questionList?: QuestionBase<any>[]) { }

let questionnaireobj = new QuestionnaireObj();
questionnaireobj.questionnaireId = 1;
questionnaireobj.questionList = [];
}

询问表

import {DropdownQuestion} from './question-dropdown';
import {QuestionBase} from './question-base';
import {TextboxQuestion} from './question-textbox';
import {Injectable} from '@angular/core';

@Injectable()
export class QuestionnaireObj {
  questionnaireId: number = 1;
  questionList: QuestionBase<any>[] = [];
  constructor() {
  }
}

我仍然不清楚您想做什么。您说:"当我调用add((函数时。但是,没有一个询问询问的实例。Service.ts文件。

最新更新