【发布时间】:2017-12-20 18:52:11
【问题描述】:
我有一个父控制器和其中的两个选项卡,每个选项卡都有自己的控制器,如下图所示: Parent and Child View Model
我正在使用 $rootScope 从 Tab1/Tab2 控制器广播一个事件,并使用 $scope 捕获它指令的控制器范围。当我在选项卡之间切换时,父控制器和指令的控制器再次被初始化,并且事件在指令的控制器中被捕获两次,即使它只广播一次。 我尝试调试并注意到指令的控制器 $id 被捕获时。当事件第一次被捕获时,指令的 id 是使用前一个选项卡(我切换的选项卡)创建的。第二次,指令的 id 是使用当前选项卡(我切换到的选项卡)创建的。
注意:1) 即使使用了 reload: false 选项,父控制器和指令控制器也会重新初始化。 2)我没有在 html 中使用 ng-controller 来初始化父控制器。它仅通过 $stateProvider 路由进行初始化。
这就是我配置状态的方式:
$stateProvider
.state('app.parent', {
url: 'parent/:paramId',
params: {
paramId: 'sample'
},
views: {
'content-parent@app': {
templateUrl: 'parent.html',
controller: 'ParentController',
resolve: {
defaultParams: function(parentService, $stateParams) {
return parentService.getDefaultParams($stateParams.paramId);
}
}
}
}
})
.state('app.parent.tab1', {
url: '/tab1/',
views: {
'content-child@app.parent': {
templateUrl: 'tab1.html',
controller: 'Tab1Controller'
}
}
})
.state('app.parent.tab2', {
url: '/tab2/',
views: {
'content-child@app.parent': {
templateUrl: 'tab2.html',
controller: 'Tab2Controller'
}
}
});
【问题讨论】:
-
嗨,欢迎来到堆栈溢出。请参阅How to Ask 链接以获取有关如何提出问题并相应更新您的问题的更多详细信息。
标签: javascript html angularjs