Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度2:当我离开路线时如何应用回调_Javascript_Angular_Angular2 Routing - Fatal编程技术网

Javascript 角度2:当我离开路线时如何应用回调

Javascript 角度2:当我离开路线时如何应用回调,javascript,angular,angular2-routing,Javascript,Angular,Angular2 Routing,以下是示例,我在AppComponent中定义了一些路由: @RouteConfig([ {path:'/', name: 'Index', component: IndexComponent, useAsDefault: true}, {path:'/:id/...', name: 'User', component: UserComponent}, {path:'/plan', name: 'Plan', component: PlanCompone

以下是示例,我在
AppComponent
中定义了一些路由:

@RouteConfig([
  {path:'/',         name: 'Index', component: IndexComponent, useAsDefault: true},
  {path:'/:id/...',  name: 'User',  component: UserComponent},
  {path:'/plan',     name: 'Plan',  component: PlanComponent},
  {path:'/foo',      name: 'Foo',   component: FooComponent}
]}
//AppComponent:
  <a [routerLink]="['User']">User</a>
  <a [routerLink]="['Plan']">Plan</a>
  <a [routerLink]="['Foo']">Foo</a>
--------------------------------------------
//UserComponent:
  <a [routerLink]="['UserInfo']">User Info</a>
  <a [routerLink]="['UserOrder']">User Order</a>
  <a [routerLink]="['UserDetail']">User Detail</a>
UserComponent
中,我定义了另一条路径,如下所示:

@RouteConfig([
  {path:'/info',   name: 'UserInfo',   component: UserInfoComponent, useAsDefault: true},
  {path:'/order',  name: 'UserOrder',  component: UserOrderComponent},
  {path:'/detail', name: 'UserDetail', component: UserDetailComponent}
]}
AppComponent
UserComponent
中定义了两个单独的导航:

@RouteConfig([
  {path:'/',         name: 'Index', component: IndexComponent, useAsDefault: true},
  {path:'/:id/...',  name: 'User',  component: UserComponent},
  {path:'/plan',     name: 'Plan',  component: PlanComponent},
  {path:'/foo',      name: 'Foo',   component: FooComponent}
]}
//AppComponent:
  <a [routerLink]="['User']">User</a>
  <a [routerLink]="['Plan']">Plan</a>
  <a [routerLink]="['Foo']">Foo</a>
--------------------------------------------
//UserComponent:
  <a [routerLink]="['UserInfo']">User Info</a>
  <a [routerLink]="['UserOrder']">User Order</a>
  <a [routerLink]="['UserDetail']">User Detail</a>
//AppComponent:
使用者
计划
福
--------------------------------------------
//用户组件:
用户信息
用户订单
用户详细信息
我期望的行为是:
当用户单击这些导航时,会出现一个模式,询问用户在离开此路线之前是否确认保存。如果是,则自动保存用户的更改

由于似乎无法在
UserComponent
中获得这些更改,因此我想将逻辑放入这些子组件中(
UserInfoComponent
UserOrderComponent
UserDetailComponent
)。那么,当用户离开子组件中的当前路由时,有没有任何方法可以触发回调?如果没有,是否有其他方法来实现这一点?谢谢

路由器已经随附

允许/拒绝导航的钩子是
routerCanDeactivate(nextInstruction,previdirection){…}
。如果从该函数返回false,它将停止导航

示例:(在plunker中,路线2永远不允许导航离开。您不能返回路线1)


您可以在进入路由时设置一个值(一个“回调”),比如
x.currentRouteLave=function(){dostuff()}
?这样,您就可以从新路由调用
someReachableObject.currentRouteLave()
。我我使用了类似的模式来跟踪上次使用的文本框以应用共享编辑器按钮…@dandavis,你的意思是拥有一个带有
CurrentRouteSave
功能的自定义路由器?@ZhiLi不客气,其他路由器生命周期挂钩也非常有用