Javascript url歧义导致ui路由器实例化控制器两次

Javascript url歧义导致ui路由器实例化控制器两次,javascript,angularjs,routing,angular-ui-router,Javascript,Angularjs,Routing,Angular Ui Router,我使用下面的状态定义(UI路由器)。 一旦调用$state.go('products.new')控制器(ProductCtrl)将被调用两次 出于某种原因,UI路由器“忘记”原始状态更改,并仅基于url调用控制器(在本例中这确实是不明确的) 如果我直接通过(深度链接)到达页面,控制器会被调用一次 有什么建议可以让它工作吗 .state('products', { abstract: true, template: "<div ui-view></div>"

我使用下面的状态定义(UI路由器)。 一旦调用$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'
})
.state('products'{
摘要:没错,
模板:“”
})
.state('products.product'{
url:“/products/:productId”,
templateUrl:'views/productView.html',
控制器:“ProductCtrl”
})
.state('products.new'{
url:“/products/new”,
templateUrl:'views/productView.html',
控制器:“ProductCtrl”
})

我刚才在使用
$state.go时遇到了同样的问题。事实证明,这确实是一个问题,我猜您的HTML中有
ng controller=“ProductCtrl”
,并且在您的状态中定义了一个控制器:


可能有很多内容,但您没有提供有关视图的详细信息:

它可能在路由中具有控制器和视图之间的绑定(如您所拥有的),也可能在视图中具有对@veroxii建议的
ng controller=“ProductCtrl”
的引用,因此路由将在请求URL时调用控制器,稍后在加载视图时再次调用控制器


但也可能是您正在使用类似于UI路由器的东西,带有引导选项卡或类似的选项卡(我有这个问题),并且您正在将
加载到选项卡(嵌套视图)中。在这种情况下,当视图中的
数量为N时,可能会调用控制器N次。将
移出选项卡和选项卡集解决了我的问题。

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

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

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

你的观点
与html文件中的语法类似

请从html中删除ProductCtrl这是一个原因,而不是答案