私はアプリケーションの状態データを格納する指示文app.service.ts
を持っています。この指示文を他のコンポーネントから使用しようとしていますので、アプリケーションの状態を取得して設定できます。私はこのディレクティブからプロパティをバインドしようとすると、それはときappState.get().loadState == true
angular2プロパティのエラーが変更されました
アプリここで私は、ロードテキストを表示しようとしているビューに私に
EXCEPTION: Expression 'loading: {{loadState}} in [email protected]:23' has changed after it was checked. Previous value: 'false'. Current value: 'true' in [loading: {{loadState}} in [email protected]:23]
をこのエラーが発生しますが
.service.tsからsource
import {Injectable} from 'angular2/core';
import {WebpackState} from 'angular2-hmr';
@Injectable()
export class AppState {
_state = {}; // you must set the initial value
constructor(webpackState: WebpackState) {
this._state = webpackState.select('AppState',() => this._state);
}
get(prop?: any) {
return this._state[prop] || this._state;
}
set(prop: string, value: any) {
return this._state[prop] = value;
}
}
import {AppState} from './app.service';
export class App{
constructor(public appState: AppState) {
this.appState.set('loadState', false);
}
get loadState() {
return this.appState.get().loadState;
}
}
app.html
<div class="app-inner">
<p>loading: {{loadState}}</p>
<header></header>
<main layout="column" layout-fill>
<router-outlet></router-outlet>
</main>
</div>
がapp.ts
子成分home.ts
とビューにロード
home.ts
を有していると仮定app.tsexport class HomeCmp {
page;
constructor(private wp: WPModels, private appState: AppState) {}
ngOnInit() {
var pageId = this.appState.get().config.home_id;
this.appState.set('loadState', true); // before http request
this.wp.fetch(WPEnpoint.Pages, pageId).subscribe(
res => {
this.page = res;
this.appState.set('loadState', false); // after http request
},
err => console.log(err)
);
}
}
このため、共有オブジェクトを使用することができます。 HTMLの{{loadState}} 'は常にこのようにエラーを投げます。むしろ、サービスで使用される共有変数をバインドしようとします。例えば。 _state = {}は共有オブジェクトです。いくつかのプロパティを設定し、htmlで '{{appState._state.someProperty}} 'を使ってアクセスできます – micronyks
@micronyks同じエラー –