我有一個代碼,在init中使用$ scope。$,然後在函數中使用,因此代碼被多次執行。如何在我再次綁定之前先解除綁定。我已經嘗試了$ scope。$ off,但是沒有這樣的函數,docs.angularjs.org/api沒有提及$ on。我正在使用角度1.0.6。
9
A
回答
26
如果不註銷的情況下,你會得到一個內存泄漏,因爲你傳遞給$上不會得到清理(如對它的引用仍然存在)的功能。更重要的是,任何在其作用域中引用的變量也會被泄漏。如果您的控制器在應用程序中被多次創建/銷燬,這將導致您的函數被多次調用。 幸運的是,AngularJS提供了一些有用的方法,以避免內存泄漏和不受歡迎的行爲:
- 方法上的$返回一個可調用函數取消註冊事件偵聽器。
- 每當範圍在Angular中被清除(即控制器被銷燬),就會在該範圍上觸發$ destroy事件。你可以註冊$ scope的$ destroy事件並從那裏調用你的cleanUpFunc。
參見文檔
示例代碼:
angular.module("TestApp")
.controller("TestCtrl",function($scope,$rootScope){
var cleanUpFunc = $scope.$on('testListener', function() {
//write your listener here
});
//code for cleanup
$scope.$on('$destroy', function() {
cleanUpFunc();
};
})
5
相關問題
- 1. 如何在jQuery中取消綁定後進行綁定?
- 2. 在回調中綁定/取消綁定
- 3. 如何取消綁定ObjectDataSource?
- 4. 如何在菜單中取消綁定後進行綁定
- 5. 如何完全取消綁定GL_ELEMENT_ARRAY_BUFFER?
- 6. 綁定和取消綁定活動
- 7. 角2,如何動態綁定和取消綁定mousemove事件
- 8. 取消綁定jQuery中
- 9. 如何取消綁定和重新綁定()點擊動畫?
- 10. 如何取消綁定jQuery keydown(shift鍵)?
- 11. wxGrid:我如何取消綁定EVT_GRID_CELL_CHANGE?
- 12. underscore.js取消綁定
- 13. 如何在C#中取消綁定套接字?
- 14. 取消綁定hashchange事件
- 15. 在backbone.js中取消綁定路由器
- 16. 在System.exit中取消綁定(0)
- 17. 在jquery中取消綁定gridview
- 18. 如何取消綁定默認視圖事件綁定?
- 19. 如何綁定和取消綁定第三方jQuery庫函數?
- 20. jquerymobile如何綁定和取消綁定鏈接?
- 21. Backbonejs:如何刪除視圖時取消綁定集合綁定?
- 22. 如何綁定和取消綁定上下文$文件
- 23. 取消綁定點擊然後綁定並再次取消綁定並將其綁定回去..重複
- 24. 取消綁定/綁定不起作用
- 25. 如何在greasemonkey中取消綁定jquery事件處理程序?
- 26. 在取消雙向數據綁定時還原Angular 2中的UI更改
- 27. 如何在Angular中綁定選定項目的文本
- 28. 如何從窗口小部件中取消綁定默認綁定
- 29. 如何從其他尚未綁定的課程中取消綁定服務
- 30. 取消綁定jquery插件
的【如何退訂在angularJS廣播事件可能重複。如何刪除通過$上註冊的函數](http://stackoverflow.com/questions/14898296/how-to-unsubscribe-to-a-broadcast-event-in-angularjs-how-to-remove-function-reg) – Julien