2017-06-21 89 views
0

我正在寫一些Angular 1.5.3代碼,我想知道你有一個調用另一個範圍函數的$ scope函數的情況。

E.g.

$scope.clickMe = function() { 
    $scope.myFunction(); 
} 

$scope.myFunction = function() { 
    console.log('yadda'); 
} 

當你這樣做時,Angular在內部發生了什麼?這是不好的做法嗎?

是更好地做到這一點:

function myFunction() { 
    console.log('yadda'); 
} 

$scope.clickMe = function() { 
    myFunction(); 
} 

$scope.myOtherFunction= function() { 
    myFunction(); 
} 
+0

我肯定這不是鼓勵。 $ scope.myFunction = function(){ myFunction(); } – CrazyMac

+0

如果你不在'scope'中使用'myFunction',並且它的私有從它刪除'scope'。 –

回答

0

這不是一個不好的做法。 AngularJS不關心你打電話的地方有什麼功能。唯一的「問題」可能是您的$scope的污染。

鑑於$scope與JavaScript中的其他Object一樣具有原型繼承性,因此可能會變得很快被污染。每次創建嵌套$scope時,它都將繼承其所有父屬性和方法。出於這個原因,最好將屬性/方法從$scope中刪除,除非您希望子組件/控制器繼承它們,或者您需要從模板中訪問它們。

0

這是代碼的第一部分。將所有功能附加到$scope對象。

$scope.clickMe = function() { 
    $scope.myFunction(); 
} 

$scope.myFunction = function() { 
    console.log('yadda'); 
} 

所以這種方式假設你有嵌套的範圍。父作用域上的所有屬性和函數都可用於其子作用域。您也可以從view/template訪問這些屬性和功能。

另一方面,您的第二個片段可避免讓子範圍繼承所有函數和屬性。在這種情況下,myFunction將在此範圍內可用,即只有該範圍內的功能才能調用/訪問此功能。您也無法從視圖/模板訪問此功能。這種私人功能,這種範圍不可見

function myFunction() { 
    console.log('yadda'); 
} 

$scope.clickMe = function() { 
    myFunction(); 
} 

$scope.myFunction = function() { 
    myFunction(); 
} 

現在給它這個它讓你決定哪個更適合你。我個人覺得第二種方法更好。把太多的邏輯放在範圍上是不好的做法,因爲這會污染範圍。你可以讓這些函數達到您希望可用於子/嵌套範圍的範圍,並且可以從視圖/模板訪問這些範圍,並且可以讓其保留爲該範圍的私有範圍。

For refrence See this Question

希望它能幫助:)

相關問題