Live working example
无需触发事件即可在组件之间共享(和同步)数据。让Angular services(和Angular forms)为您控制:
轮廓组成部分
ngOnInit() {
const token = localStorage.getItem('token');
const role = jwt.decodeToken(token).user.role;
this._userService.getUser().subscribe(v => {
this.user = v;
});
}
使用者服务
getUser() {
const token = localStorage.getItem('token')
? '?token=' + localStorage.getItem('token')
: '';
return this.http.get('api/user' + token)
.pipe(map((user: HttpResponse<any>) => {
this.user = user;
return this.user;
}),
catchError((error: HttpErrorResponse) => Observable.throw(error)))
}
updateUser(user) {
const body = JSON.stringify(user);
const headers: HttpHeaders = new HttpHeaders({'Content-Type': 'application/json'});
const token = localStorage.getItem('token')
? '?token=' + localStorage.getItem('token')
: '';
return this.http.patch('api/user/' + token, body, {headers})
.pipe(map((user: HttpResponse<any>) => {
this.user = user;
return this.user;
}),
catchError((error: HttpErrorResponse) => Observable.throw(error)));
}
轮廓设置。管理组成部分ts
ngOnInit() {
this._userService.getUser().subscribe((user: User) => {
this.user = user;
});
}
onSubmit() {
this._userService.updateUser(this.user)
.subscribe(
data => {
this._toastyService.default('Settings saved!');
console.log(data);
},
error =>{
this._toastyService.default('Error occured!');
console.log(error);
}
);
}
轮廓设置。管理组成部分html
<form #userForm="ngForm">
<div class="form-group">
<label for="name">Name</label>
<input type="text" class="form-control" id="name" aria-describedby="nameHelp"
placeholder="enter name" [(ngModel)]="user.name" name="name" required #name="ngModel">
<div [hidden]="name.valid || name.pristine"
class="alert alert-danger">
Name is required
</div>
</div>
<div class="form-group">
<label for="lastName">Last Name</label>
<input type="text" class="form-control" id="lastName" aria-describedby="lastNameHelp"
placeholder="enter last name" [(ngModel)]="user.lastName" name="lastName" required #lastName="ngModel">
<div [hidden]="lastName.valid || lastName.pristine"
class="alert alert-danger">
last Name is required
</div>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" id="email" aria-describedby="emailHelp"
placeholder="enter email" [(ngModel)]="user.email" name="email" required #email="ngModel">
<div [hidden]="email.valid || email.pristine"
class="alert alert-danger">
email is required
</div>
</div>
<button type="submit" class="btn btn-success" (click)="onSubmit()" >Submit</button>
</form>