我使用的是角1.6.1和angular-ui-router 0.3.2。
我的基本路线设置如下:
{
state: 'home',
config: {
url: '/home',
templateUrl: '...',
title: 'home'
}
},
{
state: 'view',
config: {
url: '/view',
controller: '...',
controllerAs: 'vm',
templateUrl: '...',
title: 'view'
}
}
然后根据需要将此对象传递给$routeProvider.state()
。
在我的home
州,我使用$state.go()
切换到view
州。
当我在视图状态时,我的模板看起来像这样:
<div>
<div class="go-back" ng-click="vm.goBack()">
<img src="/src/assets/images/back.png"/>
</div>
<tabs>
<tab>
<directive1></directive1>
</tab>
<tab>
</tab>
<tab>
</tab>
</tabs>
<directive2></directive2>
<directive3></directive3>
</div>
这里的每个指令都有一个绑定控制器。
我的问题是指令控制器是错误的。我的意思是,如果我在检查器中检查示例directive2
html,并尝试使用angular.element($0).scope()
在chrome中检查它的控制器,我将得到一个范围不正确的范围该指令。
甚至更奇怪它的父范围是directive3
的范围。如果我要从模板中移除directive3
而directive2
将再次开始工作,并且它将附加正确的范围。
如果我将directive2
放在directive3
下的模板中,它也会解决此问题。
模板中的<div class="go-back">...</div>
元素也存在同样的问题。它的范围是正确的,并调用vm.goBack()
函数,但如果我要从模板中删除directive3
,则vm.goBack()
不再被调用(甚至在检查控制台中的元素范围时,它是正确的范围)。
其他控制器仍然存在问题,由于某些原因没有将正确的范围附加到它们上面,我无法弄清楚原因。