url ambiguity导致ui路由器两次实例化控制器

时间:2014-08-12 09:07:18

标签: javascript angularjs routing angular-ui-router

我使用下面的状态定义(UI-Router' s)。 一旦我调用 $ state.go(' products.new'),控制器(ProductCtrl)就会被调用两次。

出于某种原因,UI路由器"忘记"原始状态更改并仅基于URL调用控制器(在这种情况下确实不明确)。

如果我直接到达页面(深层链接),控制器将被调用一次。

有任何建议如何使其发挥作用?

.state('products', {
    abstract: true,
    template: "<div ui-view></div>"
})

.state('products.product', {
    url: '/products/:productId',
    templateUrl: 'views/productView.html',
    controller: 'ProductCtrl'
})

.state('products.new', {
    url: '/products/new',
    templateUrl: 'views/productView.html',
    controller: 'ProductCtrl'
})

3 个答案:

答案 0 :(得分:6)

这可能是很多事情,但你没有提供有关你观点的更多细节:

它可能在路由中具有控制器和视图之间的绑定(就像你拥有它一样)并且在视图中引用了ng-controller="ProductCtrl",因为@veroxii建议所以路由是尽快调用控制器一旦加载视图,就会请求URL,然后再次请求。

但也可能是你正在使用UI路由器和引导标签或类似的东西(我遇到了这个问题)并且你在标签内加载了<div ui-view></div>(嵌套视图)。在这种情况下,控制器可能被调用N次N是视图中<div ui-view></div>的数量。在标签和标签集之外移动<div ui-view></div>可以解决问题。

答案 1 :(得分:5)

我使用$state.go时遇到了同样的问题。事实证明这确实是这个问题,我猜你在你的HTML 和/ / strong>某个地方的某个地方有ng-controller="ProductCtrl"

https://stackoverflow.com/a/15535724/2172360

答案 2 :(得分:0)

我也面临同样的问题。如果我们使用以下语法:

.state('products.product',{     url:'/ products /:productId',     templateUrl:'views / productView.html',     控制器:'ProductCtrl' })

然后无需在productView.html文件中添加控制器。 这是两次控制器初始化的原因。请删除

        你的看法

来自你的html文件的语法