typescript – angular2 router.navigate里面的auth0回调
发布时间:2020-12-17 17:39:16 所属栏目:安全 来源:网络整理
导读:在调用auth0lock的回调中调用router.navigate后,我遇到了渲染模板的问题 loginComponent.ts import {Component,Inject} from 'angular2/core';import {Router,ComponentInstruction} from 'angular2/router';import {Auth} from '../auth';declare var Auth0
在调用auth0lock的回调中调用router.navigate后,我遇到了渲染模板的问题
loginComponent.ts import {Component,Inject} from 'angular2/core'; import {Router,ComponentInstruction} from 'angular2/router'; import {Auth} from '../auth'; declare var Auth0Lock; @Component({ selector: 'login',templateUrl: '/tpls/login/login.html' }) export class LoginComponent { private lock = new Auth0Lock('xxx','xxx.auth0.com'); constructor(@Inject(Router) private router: Router,@Inject(Auth) private auth: Auth) { } logError = (err) => { console.log(err); } loginSuccess = (data) => { if(this.router.parent.lastNavigationAttempt !== undefined && this.router.parent.lastNavigationAttempt !== '/Login') { this.router.navigateByUrl(this.router.parent.lastNavigationAttempt); } else if(data.user.req_update) { this.router.navigate(['Profile']); } else { this.router.navigate(['Home']); } } ngOnInit() { this.lock.show((err: Error,profile: any,id_token: string) => { if(err) return this.logError(err); return this.auth.login(profile,id_token); }); this.auth.loginSuccess.subscribe( data => this.loginSuccess(data),err => this.logError(err) ); } } auth.ts import {Injectable,Inject,EventEmitter,Output } from 'angular2/core'; import {Http,Headers} from 'angular2/http'; @Injectable() export class Auth { ... @Output() loginSuccess = new EventEmitter(); login = (profile,id_token) => { ... this.addUser(profile).subscribe( data => { this.loginSuccess.next(data.json()); },err => { console.log(err); this.loginSuccess.error(err.json()); } ); } addUser = (user: any) => { let body = JSON.stringify(user); return this.http.post('/api/user/add',body,{ headers: this.headers}); } } homeComponent.ts import {Component,OnInit} from 'angular2/core'; import {Http} from 'angular2/http'; import {ROUTER_DIRECTIVES} from 'angular2/router' import {Auth} from '../auth'; import {Post} from '../post/Post'; import {IPost} from '../post/IPost'; import {AuthorComponent} from '../author/authorComponent'; @Component({ selector: 'home',templateUrl: '/tpls/home/home.html',directives: [ROUTER_DIRECTIVES,AuthorComponent] }) export class HomeComponent implements OnInit { private postService: Post; private posts: IPost[]; constructor(@Inject(Http) private http: Http,@Inject(Auth) private auth: Auth) { console.log('constructor'); this.postService = new Post(this.http,this.auth); this.getPosts(); } getPosts = () => { this.postService.all().subscribe( data => this.getPostsCallback(data.json()),err => this.logError(err) ); } getPostsCallback = (data) => { console.log('callback'); this.posts = data; } logError = (err) => { console.log(err); } ngOnInit() { console.log('init'); //this.postService = new Post(this.http,this.auth); //this.getPosts(); } } 我在我的索引页面中包含了authlock的cdn脚本.看起来像我登录后导航到的任何路线都没有呈现.来自this.lock.show的回调有效,我可以读取变量.任何意见是极大的赞赏. 基本概念:https://plnkr.co/edit/Oz8lY7v6q8GpH71WLtAK 解决方法
这应该可以解决您的问题.
import { Component,NgZone } from '@angular/core'; constructor(public router: Router,public _zone: NgZone) {} 然后在你的回调中,调用它 this._zone.run(()=>{ this.router.navigate(['uploader']); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读