javascript - 动态控制器未启动
问题描述
在这个名为 AngularJS UI router named views lazy loading的线程之后,我想要有许多选项卡,每个选项卡都分配了它自己的模板和控制器,如下所示:
angular.module('ppApp').config(function($stateProvider){
$stateProvider
.state('portfolio.patent', {
url: '/:patentId',
controller: 'mainItemCtrl',
templateUrl: 'app/templates/patent/main.main-item.tpl.htm'
}
})
angular.module('ppApp').controller('maintItemCtrl', function(){
var vm = this;
vm.leftTabs = {
'tab1': {
template: 'app/templates/child.sibling1.tpl.htm',
controller: 'siblingOneCtrl'
},
'tab2': {
template: 'app/templates/child.sibling2.tpl.htm',
controller: 'siblingTwoCtrl'
}
}
});
<uib-tabset active="active">
<uib-tab ng-repeat="(tabName,tab) in $ctrl.leftTabs" heading="{{tabName}}">
<div template={{tab.template}} controller="{{tab.controller}}">Loading {{tabName}} ...</div>
</uib-tab>
</uib-tabset>
我为兄弟控制器设置了控制器,并且它们一直在工作,直到尝试将它们动态加载到选项卡中。尽管没有调用控制器,但模板正在加载到视图中。如果我检查源代码,控制器指令将两个兄弟控制器作为值。
问题
为什么我的控制器没有启动?
解决方案
我从未尝试过,但这可能是因为表达式插值发生得太晚,无法访问和影响控制器构造和初始化发生的生命周期阶段。
至少,在指令控制器中,插值发生在 之后$postLink
,这意味着此时所有子控制器都已链接,并且在父控制器的生命周期中声明和实例化新的子控制器为时已晚。
编辑: 这已由文档确认:
控制器构造函数。控制器在预链接阶段之前被实例化,并且可以被其他指令访问(参见 require 属性)。
推荐阅读
- jquery - 如何一起选择特定的表格和班级和ID
- python - 使用 OpenAI Gym 构建 mujoco-py 失败的轮子
- javascript - Ajax同步post方法,从Node服务器端获取数据
- bash - 每次重启 AWS EC2 实例时执行脚本
- c# - 我遇到关于“Expr1000”的错误
- reactjs - 在 ReactJS 中路由后从子组件获取值
- oracle - PL/SQL 异常未捕获异常
- android - 在两个顺序 addToBackStack 之后,supportFragmentManager.fragments 大小为 1
- unity3d - 如何统一导出带有mtl文件的obj文件?
- java - 方法参考中的错误返回类型:无法将 reactor.core.publisher.Mono 转换
为 reactor.core.publisher.Mono