我在回调功能上停留了导航,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(['/']);
})
答案 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
对象。