ユーザーがデータを保存したときにBootstrapアラートを表示したい。
私のコードは以下の通りです:
htmlページ:
<div class="alert alert-success" *ngIf="saveSuccess">
<strong>Success!</strong>
</div>
<form #f="ngForm" (submit)="saveUser(f.value)">
/////Some form fields
<button class="form-control btn btn-primary" type="submit">save</button>
</form>
app.component.ts:
export class UserProfileComponent{
saveSuccess: boolean;
user: IUser;
saveUser(user:IUser) {
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.editUserForm = user;
this._http.post('api/user/'+this._current_user._id, JSON.stringify(this.editUserForm),{
headers: this.headers
}).subscribe(function(data) {
// if the update is successful then set the value to true
// this is getting updated
if (data){
this.saveSuccess = true;
}
else{
this.saveSuccess = false;
}
});
}
}
POSTが成功したときにアラートを表示したいです。
保存が成功したときにアラートを表示できるように、「saveSuccess」変数をhtmlにバインドする方法が欠けていると思います。 (私はAngular2を初めて使用します)
昨夜私はそれを見ませんでした、それはおそらく手遅れでした。ただし、問題は、this
を設定するインライン関数にsaveSuccess
コンテキストがないことです。
ラムダまたは「ファットアロー関数」を使用することをお勧めします。の代わりに
function(data) { ... }
あなたがやる
(data) => { ... }
このようにして、this
コンテキストが保持されます。インライン関数が必要な場所で使用するだけで、もう問題はありません。 :)
ラムダ関数を使用したコード:
export class UserProfileComponent{
saveSuccess: boolean;
user: IUser;
saveUser(user:IUser) {
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.editUserForm = user;
this._http.post('api/user/'+this._current_user._id, JSON.stringify(this.editUserForm),{
headers: this.headers
})
.map((data: Response) => data.json) // <-- also add this to convert the json to an object
.subscribe((data) => { // <-- here use the lambda
// if the update is successful then set the value to true
// this is getting updated
if (data){
this.saveSuccess = true;
}
else{
this.saveSuccess = false;
}
});
}
}
この動的アラートコンポーネントについて考えてみます。
内部コンポーネントを作成、表示、管理するAngular2サービス?js alert()の実装方法?
例えば: 。
this.alertCtmService.alertOK("Save changes???").subscribe(function (resp) {
console.log("alertCtmService.alertOK.subscribe: resp=" + resp.ok);
this.saveData();
}.bind(this) );