Javascript Typescript:无法访问函数中的公共变量
我想访问Javascript Typescript:无法访问函数中的公共变量,javascript,typescript,Javascript,Typescript,我想访问myVariable内部init()但变量未定义,但我可以访问convert()内部的变量。有什么建议我在这里遗漏了什么 export const MyComponent: ng.IComponentOptions = { templateUrl: 'MyView.html', bindings: { myVariable: '<', }, controller: common.createController(MyControlle
myVariable
内部init()
但变量未定义
,但我可以访问convert()
内部的变量。有什么建议我在这里遗漏了什么
export const MyComponent: ng.IComponentOptions = {
templateUrl: 'MyView.html',
bindings: {
myVariable: '<',
},
controller: common.createController(MyController)
};
export class MyController {
public myVariable: MyVariable;
constructor($scope) {
this.scope = $scope;
this.init().then(() => {
this.convert();
});
private init(): Promise<void> {
console.log("init(): ", this.myVariable); //Error --> undefined
//Call REST API and return a promise
}
private convert(): void {
console.log("convert(): ", this.myVariable); //No Error
}
}
export const MyComponent:ng.IComponentOptions={
templateUrl:'MyView.html',
绑定:{
myVariable:“通常发生这种情况是因为在基本构造函数之前调用了init()
——基本构造函数通常是在视图库中设置变量的对象
我不知道您使用的是什么视图库,但它看起来像angular。在这种情况下,angular将在构造函数运行后设置绑定(它需要先创建类,然后才能分配绑定,因为它不提供基类,所以无法在构造函数中使用该基类进行绑定)
Angular API公开了与react类似的生命周期方法,您需要$onInit
钩子,它将在构造函数和绑定完成后调用
您可以在此处阅读更多内容您在哪里设置MyController.myVariable
?如果您不设置它,它将保持未定义状态(或者无法在TS 2.8中使用选项strict进行编译)。您的问题很可能是在构造函数之后和承诺解决之前设置了变量。因此,了解值的设置位置非常重要。这里没有基构造函数,TS需要在派生类中调用super
,因此如果这是问题,则整个代码将不会运行。添加super()抛出错误:“super”只能在派生类中引用。MyController是基类。@david我理解,请查看我修改的答案