私はサービスとコンポーネントを持つ角度2のアプリを持っています。角度2はサービスからオブジェクトを更新していません
サービス:
import { Injectable } from '@angular/core';
import { User } from '../dtos';
import { Http, Response } from '@angular/http';
@Injectable()
export class UserService {
public user: User;
constructor(private http: Http){}
public authenticate(username: string, email:string) {
var __this = this;
this.http.get('https://randomuser.me/api/')
.subscribe((response: Response) => {
__this.user = new User();
var respData = response.json();
var userResult = respData.results[0];
var seed = respData.info.seed;
__this.user.email = userResult.email;
__this.user.firstName = userResult.name.first;
__this.user.lastName = userResult.name.last;
__this.user.profilePicture = userResult.picure;
__this.user.id = seed;
})
}
}
コンポーネント:
import { Component } from '@angular/core';
import { User } from '../../dtos';
import { UserService } from '../../services';
@Component ({
selector: 'navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent{
user: User;
constructor(private userService: UserService){}
ngOnInit(){
this.user = this.userService.user;
}
}
とコンポーネントのHTMLテンプレート:
<ul class="topnav">
<li><a routerLinkActive="active" routerLink="/home">Home</a></li>
<li><a routerLinkActive="active" routerLink="/about">About</a></li>
<li class="right" ><a href="#">{{user.userName}}</a></li>
</ul>
UserService.authenticateでhttp.getコールがで返します有効なユーザーオブジェクト、私はデータでローカルユーザープロパティを更新します。 Navbarコンポーネントは、ユーザーオブジェクトが更新されたことを登録せず、データをテンプレートに入れません。
更新されたユーザーデータをnavbarコンポーネントに表示する方法を教えてください。
Observableパイプと非同期パイプを使用する必要があります。http://briantroncone.com/?p=623 – pietro909
また、パブリックプロパティとして_user_を公開することは、可変性を考慮してアンチパターンであることを追加します。サービスには完全な制御権がありません。なぜあなたはgetter/setterを使用しないのですか? – pietro909