Хорошо, это меня искажает какое-то время, задаваясь вопросом, может ли кто-нибудь показать мне хороший способ цепочки. Наблюдения между несколькими службами.Как связать/объединить Observables
В приведенном ниже примере в классе Auth было бы хорошим способом создания наблюдаемого из this.api.postSignIn()
, так что signInSubmit()
может подписаться на него обратно в компоненте? Стоит отметить, что this.api.postSignIn()
подписывается на запрос Angular2 http.
Это немного анти-шаблон и есть ли лучшие способы сделать это?
В основном функциональность я хотел бы достичь, это:
- Компонент - отвечает за сбор данных в знак и отправив его на службу авторизации в правильном формате. Затем, как только вход Auth будет завершен, перейдите на страницу администратора.
Служба - Сделать api-вызов, чтобы получить токен, установить токен через службу токенов и установить
isSignedIn
bool, а затем отложить управление обратно вызывающему компоненту.@Component({...}) export class SignIn { private signIn:SignInModel = new SignInModel(); constructor(private auth:Auth, private router:Router) { } ngOnInit() { } signInSubmit() { this.auth.signIn(this.signIn) .subscribe( () => { this.router.navigate(['/admin']); } ) } } @Injectable() export class Auth { private isSignedIn:boolean = false; constructor(private api:Api, private tokenService:TokenService) { } public signIn(signIn:SignInModel) { return this.api.postSignIn(signIn) .subscribe( response => { this.tokenService.set(new TokenModel(response.token)); this.isSignedIn = true; }, error => { console.log(error); } ); } public signOut() { } }
Спасибо, прочитайте на .do() и .catch() и узнайте, как он отличается от subscribe(). –
Добро пожаловать! Разница в использовании операторов заключается в том, что они позволяют подключать обработку к асинхронному потоку данных. При подписке вы «просто» получаете события (ошибки и завершение) на наблюдаемом. Этот удивительный учебник будет полезен для понимания этого: https://gist.github.com/staltz/868e7e9bc2a7b8c1f754. –