我使用下面的状态定义(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'
})
答案 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"
:
答案 2 :(得分:0)
我也面临同样的问题。如果我们使用以下语法:
.state('products.product',{ url:'/ products /:productId', templateUrl:'views / productView.html', 控制器:'ProductCtrl' })
然后无需在productView.html文件中添加控制器。 这是两次控制器初始化的原因。请删除
你的看法来自你的html文件的语法