2015-08-19 22 views
7

根據我的知識,當我們將一個變量附加到作用域時,手錶會被應用到它並且它會被檢查每個摘要循環。一個好的經驗法則是,我們不應該在給定的時間監視超過2000個變量。如何從angular.js中的作用域「刪除」一個變量

我的問題是如何從範圍中刪除已存在的變量。例如$scope.var1=1說我必須創建它一次性使用。我是否有可能從範圍中「刪除」它,或者是否會在範圍的生命週期中觀察變量?

編輯:

從下面的評論我明白,你應該手動刪除或手錶時的範圍被摧毀,他們被摧毀。不過,我仍不清楚你將如何刪除由ngModel等指令設置的變量?

+0

@RomanÇ糾正我,如果我錯了,所以解決問題中提出的是,我們刪除一個參考給定的變量,並在本質上讓垃圾收集器做的工作?我也考慮過它,但我認爲他們可能是一個更「有角度」的方式來做到這一點 –

+0

只是在範圍上創建一個值不會創建一個手錶...此外,如果有手錶,只需刪除範圍上的變量不會清理手錶。如果擔心太多手錶,請考慮一次性裝訂(Angular> 1.3)(如果適用)。 – Patrick

回答

32

您可以簡單地使用delete關鍵字:

delete $scope.var1; 
+0

好吧,通過使用delete關鍵字,我們從對象中解引用屬性。因此,應該擺脫相應的手錶,並防止它在摘要週期中被檢查,我的理解是否正確? –

+1

否 - 刪除值(如果已定義)會導致監視回調執行,因爲該值將從定義中刪除/未定義。手錶通過調用$ scope來顯式設置。$ watch或隱式地通過使用創建監視的指令(例如ngModel)。 – Patrick

+0

該屬性在'$ scope'對象中不再存在,並且在digest循環中不會檢查該屬性,但手錶保持不變。如果你想刪除手錶,請參閱[Angular Js Clear $ watch](http://stackoverflow.com/questions/14957614/angular-js-clear-watch) – aghidini