未调用ui-router嵌套路由控制器

时间:2014-01-01 08:41:29

标签: angularjs angular-ui-router

我正在尝试调用一个控制器,该控制器应该与home.category路由链接,但它没有被调用。它有什么问题?

$stateProvider    
  .state("home", {
    // Use a url of "/" to set a states as the "index".
    url: "/",
    templateUrl: APP_CONFIG.baseUrl +
      'partials/layouts/home.html',
    controller: 'MainCtrl'
  })
  .state("home.category", {
    // Use a url of "/" to set a states as the "index".
    url: "c/:categoryId/:categorySlug",
    controller: function($stateParams) {
      alert($stateParams.categoryId);
    }
  })

3 个答案:

答案 0 :(得分:79)

好吧,我从ui-router说明

的给定文档中找到了线索
  

您可以将控制器分配给模板。 警告:如果未定义模板,则不会实例化控制器。

https://github.com/angular-ui/ui-router/wiki#controllers

但是我试图添加template但仍然没有用,然后我看到我的父路由模板没有<div ui-view></div>(我错误地删除了它)所以当我把它添加回去的时候工作:),所以,要实例化我们孩子的路由控制器,我们必须在父路由模板中有<div ui-view></div>

答案 1 :(得分:40)

可能无法调用控制器的另一个原因是,如果您有一个状态的多个视图,并且不将控制器放在视图对象中。这很难找到,因为没有错误。它只是没有被调用。

不会调用此控制器:

.state('home', {
    url: '/',
    controller: function($scope){ $scope.someThings = "some stuff"; },
    views: {
        "view1": {                
            template: '<p>{{someThings}}</p>'
        },
        "": {
            template:
                '<p>Some other stuff</p>'
        }
    }
})

控制器必须进入视图对象:

.state('home', {
    url: '/',        
    views: {
        "view1": {                
            template: '<p>{{someThings}}</p>',
            controller: function($scope){ $scope.someThings = "some stuff"; },
        },
        "": {
            template:
                '<p>Some other stuff</p>'
        }
    }
})

答案 2 :(得分:3)

在关闭事件中有人正在更改项目以使用ui.router而不是ngRoute,我有这个问题,因为我忘了将ng-view指令更改为ui-view:Z