如何在Angular2中正确简单地声明一个对象

时间:2017-03-24 21:02:50

标签: angular ionic2

我正在尝试声明一个对象并在我的离子2应用程序中设置默认值,但我还不太了解typescript和angular2。

我这样做了:

@Component({
    selector: 'page-weightlevel'
    , templateUrl: 'weightlevel.html'
})
export class WeightlevelPage {

    name: string;
    firstNavParam: boolean;
    data = any;
    data.shareoptions: ['Facebook', 'Twitter', 'Email'];
    data.techniqueText: string;
    data.frequScaleWording: string[];
    data.fitnessWording: string[];
    data.levelName: string[];

    constructor(
        public navCtrl: NavController,
        ....

我收到此错误:

Typescript Error
';' expected.
src/pages/weightlevel/weightlevel.ts
data.shareoptions: ['Facebook', 'Twitter', 'Email'];

数据和分享选项之间的点显然不受欢迎。

你能帮帮忙吗?

5 个答案:

答案 0 :(得分:10)

在Typescript中声明/初始化Object的方法是,通过名称来说,输入您的数据。您可以使用any,但这只是违反了TypeScript的目的。因此,创建一个具有所需属性的模型,因此声明一个空对象将是:

data: MyType = <MyType>{};

您现在要做的是将数据分配给对象。为此,请使用=

ngOnInit() {
  this.data.shareOptions = ['Facebook', 'Twitter', 'Email']
}

根据评论中的讨论,您可以自然地在组件中的Object内声明数组,如下所示:

data = <MyType>{shareOptions:['Facebook','Twitter','Email']};

请记住,即使声明了类型,例如界面,它也不会在运行时存在。键入仅供编译器帮助您,并在您尝试分配模型中不存在的值或属性时告诉您。因此,您实际上可以覆盖所有模型,您的应用程序将正常运行。

  

执行键入您的数据并避免使用any

答案 1 :(得分:3)

根据我的经验,我通过以下方式创建了对象。但是当我在角度5.2中运行构建脚本时,我遇到了错误。然后我用第二种方式。

错误的方式:

 data = {};

正确的方式:

 data:any = {};

答案 2 :(得分:2)

如果已经创建了模型类

    let car = <ICar>{};
    car.Name= "Audi";
    car.Model = "A4";
    car.category = "German";

答案 3 :(得分:0)

首先您需要在模型文件中创建一个新类。如果没有任何模型文件创建新的。然后创建一个具有如下属性的类。

Class Data{

 shareoptions: [];
 techniqueText: string;
 frequScaleWording: [];
 fitnessWording: [];
 levelName: [];
}

然后使用该类在组件中创建新对象

@Component({
    selector: 'page-weightlevel'
    , templateUrl: 'weightlevel.html'
})
export class WeightlevelPage {

    name: string;
    firstNavParam: boolean;


    constructor(
        public navCtrl: NavController,
     data = new Data();
    data.shareoptions = ['Facebook', 'Twitter', 'Email'];
        ....

<强> PS

标记后,您可以指定数据类型。 ['Facebook','Twitter','电子邮件']不是数据类型。如果您需要为数据分配数组,请使用 = 标记。如果需要为数组赋值,请在构造函数

中进行
 data.shareoptions = ['Facebook', 'Twitter', 'Email'];

<强>编辑:

标记后,您可以指定数据类型。 ['Facebook','Twitter','电子邮件']不是数据类型。如果您需要为数据分配数组,请使用 = 标记。如果需要为数组赋值,请在构造函数

中进行
@Component({
    selector: 'page-weightlevel'
    , templateUrl: 'weightlevel.html'
})
export class WeightlevelPage {

    name: string;
    firstNavParam: boolean;
    data = any;
    data.shareoptions:any;
    data.techniqueText: string;
    data.frequScaleWording: string[];
    data.fitnessWording: string[];
    data.levelName: string[];

    constructor(
        public navCtrl: NavController,
        data.shareoptions= ['Facebook', 'Twitter', 'Email'];

答案 4 :(得分:0)

我不理解interface解决方案,他们已经被贬低了,所以我接受了这个:

@Component({
    selector: 'page-weightlevel'
    , templateUrl: 'weightlevel.html'
})
export class WeightlevelPage {

name: string;
firstNavParam: boolean;
data = any;
data.shareoptions: ['Facebook', 'Twitter', 'Email'];
data.techniqueText: string;
data.frequScaleWording: string[];
data.fitnessWording: string[];
data.levelName: string[];

constructor(
    public navCtrl: NavController,
    public navParams: NavParams,
    private storageService: LocalStorageService
    , public globalVars: GlobalVars
) {

    this.globalVars.addGlobalVar("isWebIntegration", false);

    this.data.shareoptions = ['Facebook', 'Twitter', 'Email'];

它似乎有效。