2 回答
TA贡献1765条经验 获得超5个赞
好吧,实际上问题是ngView控制器的生命周期是多少。
控制器不是单例。任何人都可以创建一个新的控制器,并且它们永远不会被自动销毁。事实是,它通常与其基础范围的生命周期相关联。只要销毁其范围,控制器就不会自动销毁。但是,销毁基础作用域后,其控制器就没有用了(至少在设计上应该如此)。
在回答您的特定问题时,每次进行导航时,ngView指令(以及ngController指令)总是会创建一个新的控制器和一个新的作用域。而最后的范围将要毁灭为好。
生命周期“事件”非常简单。您的“创建事件”是控制器本身的构造。只需运行您的代码。要知道什么时候变得没用(“破坏事件”),请监听作用域$destroy事件:
$scope.$on('$destroy', function iVeBeenDismissed() {
// say goodbye to your controller here
// release resources, cancel request...
})
对于ngView具体情况,你可以当内容被通过范围事件时加载的认识$viewContentLoaded:
$scope.$on('$viewContentLoaded', function readyToTrick() {
// say hello to your new content here
// BUT NEVER TOUCHES THE DOM FROM A CONTROLLER
});
这是带有概念证明的Plunker(打开控制台窗口)。
TA贡献1155条经验 获得超0个赞
viewContentLoaded仅在您使用超时时才有效,因为它是在模板加载之前分派的。文档说的相反,但是template: "HTML STRING"
当它是异步加载的模板文件时,它们引用的是raw 。
添加回答
举报