2014-01-27 52 views
2

我想知道是否有人在模塊內使用$ scope與普通JavaScript對象的建議。例如我在控制器中有一些變量,爲了方便起見我將它們附加到$ scope中,但它們可能只是控制器內部的常規對象,沒有任何功能差異。它是否會影響角度性能以涵蓋範圍內的所有內容?

我的問題是,當Angular進入一個摘要循環以使範圍內的所有東西都影響性能時?

是這樣的:

$scope.viewpanel = {}; 
$scope.viewpanel.date = new Date(); 
$scope.viewpanel.day = $scope.viewpanel.date.format('d'); 
$scope.viewpanel.week = $scope.viewpanel.date.format('W'); 
$scope.viewpanel.month = $scope.viewpanel.date.format('m'); 
$scope.viewpanel.year = $scope.viewpanel.date.format('o'); 

更好或更差比這

var viewpanel ={}; 
viewpanel.date = new Date(); 
viewpanel.day = viewpanel.date.format('d'); 
viewpanel.week = viewpanel.date.format('W'); 
viewpanel.month = viewpanel.date.format('m'); 
viewpanel.year = viewpanel.date.format('o'); 
+1

如果其他東西不需要它,像視圖,可能應該保持它的範圍,以免污染它。 –

+1

我無法回答關於性能的問題,但考慮一下:沒有必要用不需要的對象污染範圍,它應該被封裝。考慮一種情況,即你有嵌套的作用域,其中每個作用域都會顯示不必要的對象。如果這些對象具有相同的名稱,那麼它可能很混亂。 – Matsemann

+1

你有沒有試過測量? –

回答

2

是的,它確實,如果你在你的模板,自動創建觀察家使用它會影響性能。如果它們不受任何約束,那麼它並不重要(有一些額外的開銷),但很多人不喜歡擁擠的範圍。 This wiki article on Scopes will explain exactly what happens when you add something to $scope

另一種選擇是結合一次或angular-once。這就像常規綁定,但只設置一次,所以它減少了觀察者的數量。

此外,對於您的具體示例,您可以考慮使用過濾器來格式化日期。雖然這不會對性能本身有所幫助,但會爲您提供更簡潔的代碼。

+0

感謝所有的回覆,我認爲是時候重構一下了;) – simplesthing

+0

你有兩個參考嗎? – mlunoe

+0

@mlunoe,我添加了一個鏈接到wiki文章解釋範圍。 –

相關問題