關鍵字let
不應在這方面可以使用。請使用以下方法之一:
private payload = new User(); // if you don't want this accessible outside the class
public payload = new User(); // if class outsiders should access it directly
你問:
如何設置模型的屬性實例之後?
正確的位置是ngOnInit
lifecycle hook。這是代碼,一旦你的組件被初始化(但之前的觀點是準備好)
export class MyComponent implements OnInit {
private someProperty:int;
ngOnInit(){
this.someProperty = 7;
}
}
如果你有很多工作要做,只是打電話給你不同的初始化函數從ngOnInit
角內執行。在你的代碼中,你有一個服務。由於這不是一個組件,它不能使用這個生命週期鉤子。如果你已經知道屬性的值,你寫的代碼(從你的第二個屏幕截圖看來,你這樣做),你可以直接設置它:
private payload:User = {
email: '...',
token: '...'
}
但機會是你不知道這一切的東西,它將被設置爲一個函數的結果。然後,正確的方法是從您將使用該服務的組件調用的初始化函數。
@Injectable()
export class UserService {
private isInitialized:boolean = false;
private payload:User;
public init(){
// init() should only run once
if(this.isInitialized) return;
this.payload = new User();
this.payload.email = '...';
this.payload.token = this.someFunction();
// to prevent init() from running again
this.isInitialized = true;
}
private someFunction(){return 'token';}
}
然後在任何組件中,您需要做的就是在使用它之前調用this.userService.init()
。
注1:對於服務有一個全局實例,則必須在providers
陣列的主要AppModule
的上市,而不是在其他地方提供。
注2:如果初始化包括異步代碼,如從遠程位置,你需要仔細返回一個承諾或可觀察到的,併爲您的代碼要等到它解析爲嘗試使用獲取數據服務。
我想補充,你需要再this.payload訪問有效載荷讓利是對於那些在ECMA 6 –
一個函數變量如何I S在實例化模型後模型中的屬性? – sparkr
@sparkr我已經添加到我的答案。 – BeetleJuice