我有一个用于认证的服务,暴露了类BehaviorSubject的用户。 我想使用组件中的服务来允许登录/注销并显示用户属性....在那里没有什么新东西。我应该如何使用Angular 4中的组件的HTML模板中的服务中的BehaviorSubject类?
我知道我可以订阅组件中的用户对象,并将结果分配给本地对象,这反过来我将在视图中使用。但我有兴趣知道如何使用它,而不需要在打字稿中订阅,但是直接在html中,我想这要感谢异步管道。
这些都是伪类,我会用:
auth服务
export class User {
id: string;
username: string;
gender: string;
constructor(some params...) {
// set all the attributes...
}
}
@Injectable()
export class AuthService {
private _currentUser: BehaviorSubject = new BehaviorSubject(null);
get currentUser() {
// do some logic here if needed
return this._currentUser;
}
constructor() {}
login(email, password) {
DoSomeHttpRequestToLogin()
.then(userParams => {
const user = new User(userParams);
this._currentUser.next(user);
})
.catch(error => {});
}
}
组件
@Component({
selector: 'app-main',
templateUrl: './main.component.html'
})
export class MainComponent implements OnInit {
notWhatIWantToUse_User: User;
currentUser$: ????
constructor(private _authService: AuthService) {
// With subscription, which I'd like to avoid
this.authService.currentUser.subscribe(user => {
this.notWhatIWantToUse_User = user;
}
// Without subscription, my goal
this.currentUser = this.authService.currentUser;
}
ngOnInit() {
this.authService.login();
}
}
main.component.html
First Method: Hello {{ notWhatIWantToUse_User?.username }}
Second Method: Hello {{ ... some code with currentUser$ to show username, or id or gender... }}
如何使第二种方法有效?
这种情况下的最佳做法是什么?
如何使用'share()'来避免重复 隐式订阅?
感谢您的帮助
+0
请注意,除非您确实需要外部类修改它们,否则通常只会公开'Observable'而不是'Subject'。 –
+0
感谢您的建议! –