嵌套ui-view中的指令调用两次

时间:2016-12-21 18:12:42

标签: angularjs angular-ui-router angular-ui state

我使用ui-router和组件。导航工作得很好,组件$ onInit被调用一次(如预期的那样),但在指令的$ onInit(指令作为组件模板中的元素)被调用两次。

如果从组件模板中删除ui-view属性,则只调用一次。不知道为什么会这样。

第一个问题 :我应该像我一样使用ui-view吗?我希望能够拥有嵌套路由,以便保留父状态(管理用户将是一个网格,我想保留任何排序,分页等)。我还希望子路由替换父DOM的片段。

第二个问题 :为什么指令' $ onInit被调用两次?

http://plnkr.co/edit/rc8vbt?p=preview

我的代码如下所示:

var admin = {
  name: 'admin',
  abstract: true,
  url: '/Admin',
  template: `<div ui-view=""></div>`
};
var adminManageUsers = {
  name: 'admin.manageUsers',
  url: '/Users',
  component: 'manageUsers'
};
var adminAddUser = {
  name: 'admin.manageUsers.add',
  url: '/Add',
  component: 'addUser'
};
$urlRouterProvider.otherwise('/Admin/Users');
$stateProvider
  .state(admin)
  .state(adminManageUsers)
  .state(adminAddUser);

和组件

app.component('manageUsers', {
  template: `<div ui-view="">
    <div>Manage Users</div>
    <input type="button" value="Add User" ng-click="$muCtrl.addUser()" />
    <test-directive></test-directive>
  </div>`,
  controller: adminManageUsersComponentController,
  controllerAs: '$muCtrl'
});

app.component('addUser', {
  template: `<div ui-view="">
    <div>Add User</div>
    <input type="button" value="Manage Users" ng-click="$auCtrl.manageUsers()" />
  </div>`,
  controller: adminAddUserComponentController,
  controllerAs: '$auCtrl'
});

修改
我创建了另一个plnkr here,它使用命名视图作为详细的here(命名视图/视图定位)。 仍然是同一个问题:(

1 个答案:

答案 0 :(得分:0)

这是一个已在master中解决的已知问题,很可能会在下一个版本中发布。

https://github.com/angular-ui/ui-router/issues/3224