2 回答

TA貢獻1765條經(jīng)驗 獲得超5個贊
好吧,實際上問題是ngView控制器的生命周期是多少。
控制器不是單例。任何人都可以創(chuàng)建一個新的控制器,并且它們永遠不會被自動銷毀。事實是,它通常與其基礎(chǔ)范圍的生命周期相關(guān)聯(lián)。只要銷毀其范圍,控制器就不會自動銷毀。但是,銷毀基礎(chǔ)作用域后,其控制器就沒有用了(至少在設(shè)計上應該如此)。
在回答您的特定問題時,每次進行導航時,ngView指令(以及ngController指令)總是會創(chuàng)建一個新的控制器和一個新的作用域。而最后的范圍將要毀滅為好。
生命周期“事件”非常簡單。您的“創(chuàng)建事件”是控制器本身的構(gòu)造。只需運行您的代碼。要知道什么時候變得沒用(“破壞事件”),請監(jiān)聽作用域$destroy事件:
$scope.$on('$destroy', function iVeBeenDismissed() {
// say goodbye to your controller here
// release resources, cancel request...
})
對于ngView具體情況,你可以當內(nèi)容被通過范圍事件時加載的認識$viewContentLoaded:
$scope.$on('$viewContentLoaded', function readyToTrick() {
// say hello to your new content here
// BUT NEVER TOUCHES THE DOM FROM A CONTROLLER
});
這是帶有概念證明的Plunker(打開控制臺窗口)。

TA貢獻1155條經(jīng)驗 獲得超0個贊
viewContentLoaded僅在您使用超時時才有效,因為它是在模板加載之前分派的。文檔說的相反,但是template: "HTML STRING"
當它是異步加載的模板文件時,它們引用的是raw 。
添加回答
舉報