我正在尝试声明一个对象并在我的离子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'];
数据和分享选项之间的点显然不受欢迎。
你能帮帮忙吗?
答案 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'];
它似乎有效。