AngularJS UI路由器多次加载相同的控制器

时间:2015-01-07 15:22:19

标签: javascript angularjs angular-ui-router

我遇到以下问题:

这是我的$ stateProvider的一部分:

angular.module('sampleApp').config(function ($stateProvider) {
$stateProvider
  .state('property', {
    url: '/property',
    templateUrl: 'app/property/property.html',
    controller: 'PropertyCtrl',
    authenticate: true,
    role: 'user'
  })
  .state('property.selected', {
    url : '/:propertyId',
    templateUrl : 'app/property/edit/edit-controller.html',
    controller : 'PropertyEditCtrl'
  })
  .state('property.selected.settings', {
    url : '/settings',
    templateUrl : 'app/property/partials/settings.html'
  })
  .state('property.selected.settings.general', {
    url : '/general',
    templateUrl : 'app/property/partials/settings-general/settings-general.html',
    controller : 'SettingsGeneralCtrl'
  })
  .state('property.selected.settings.property', {
    url : '/property',
    templateUrl : 'app/property/partials/settings-property/settings-property.html',
    controller : 'SettingsPropertyCtrl'
  })
  .state('property.selected.settings.extras', {
    url : '/extras',
    templateUrl : 'app/property/partials/settings-extras/settings-extras.html',
    controller : 'SettingsExtrasCtrl'
  })

发生的事情是由'property.selected'之外的任何状态加载的控制器加载了几次。 在'property.selected.settings.general'的情况下,SettingsGeneralCtrl加载28次。如果我在该控制器和console.log中监听事件,则会记录28次。

知道为什么吗?我完全迷失了。

1 个答案:

答案 0 :(得分:3)

问题是我在那个级别上有一堆未命名的ui-views。由于控制器是由ui-view调用的,因此它会多次加载。

解决方案是命名视图并使用ui-view =" viewName"来调用它们。