Angular 5路由器从回调导航无效

时间:2018-04-29 19:25:15

标签: angular routing angular5 router

我在回调功能上停留了导航,router.navigate什么都不做。

我在stackoverflow中看到使用NgZone可能有所帮助,但仍然没有成功,只有工作正在使用window.location.href =' url ...'

但这不是角度函数,我真的想了解错误。

这是我的代码。

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    ChatComponent,
    NotFoundComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    RouterModule.forRoot([
      { path: '', component: HomeComponent },
      { path: 'login', component: LoginComponent },
      {path:'chat',component:ChatComponent},
      { path: '**', component: NotFoundComponent }
    ])
  ],
  providers: [],
  bootstrap: [AppComponent]
})

成分:

import { ActivatedRoute, Router } from '@angular/router';

constructor(private router: Router,
    private route: ActivatedRoute,
    private zone: NgZone) { }

Parse.FacebookUtils.logIn('email,user_birthday,user_friends', {
      success: function (user) {
        // Handle successful login
        console.log(user);
        this.router.navigate(['/']);

      },error: function (user, error) {
        // Handle errors and cancellation
      }
    });

也尝试过这样的回答仍然没有成功:

this.zone.runTask(()=>{
      this.router.navigate(['/']);
    })

1 个答案:

答案 0 :(得分:1)

似乎你正在失去你的背景,尝试在回调中使用一个胖箭头。

function calculateSomeState(data) {
  // ...
  return { updated: data };
}

class MyComponent extends React.Component {
    constructor(props) {
      super(props)
      this.state = calculateSomeState(props.data);
    }

    handleChange = (e) => {
        const value = e.target.value;
        this.setState(calculateSomeState({ ...props.data, value }));
    }
}

当您使用回调时,您必须确保它将使用您的上下文,当前Parse.FacebookUtils.logIn('email,user_birthday,user_friends', { success: (user) => { // Handle successful login console.log(user); this.router.navigate(['/']); },error: (user, error) => { // Handle errors and cancellation } }); 应该是您的组件,在打字稿中您将使用胖箭头运算符({{ 1}})与vanilla js this具有相同的效果,以确保回调中的代码将使用正确的=>,否则回调的function.bind(this)对象将是this对象。