2016-08-16 73 views
1

很明顯,應該將方法設置爲範圍,以便對視圖(在html中)或指令或任何其他地方可見或可用該方法應該被訪問,以便該方法可以通過$ scope來訪問。我的問題是要知道$scope總是必要的,或者在定義方法時使用。例如,以下是不同的方法聲明:

方案1. $ scope.myMethod = function(){};
方案2。 var myMethod = function(){};

如果'myMethod'僅用於一個控制器,是否需要將其設置爲$ scope?有什麼優勢或爲什麼場景1或2好?

如果有人聲明它爲$ scope.myMethod = function(){}?它是不是很好或$範圍的不必要的負載?最佳做法是什麼?

注:我不需要做任何調查在這裏,請讓我知道任何利弊

回答

1

您主要使用的第一個場景的東西像綁定click事件。如果您只打電話給myMethod,您並不需要在範圍內進行定義。

例如下面將需要第一個定義:

<button ng-click="myMethod()">My Button</button> 

但下面可以使用第二:

angular.module('myCtrl', []) 
.controller('myController', function($scope) { 
    var myMethod = function (text) {alert(text)}; 
    $scope.mySecondMethod = function() { myMethod('second'); } 
    $scope.myThirdMethod = function() { myMethod('third'); } 

在第二種情況下,你可以使用事件mySecondMethodmyThirdMethod結合。

1

作用域是應用程序控制器和視圖之間的粘合劑。 模板鏈接階段的指令設置$ watch表達式爲 的範圍。 $ watch允許向指令通知屬性 的更改,從而允許指令將更新的值呈現給 DOM。

這兩個控制器和指令都相互參照範圍,但不是 。這種安排將控制器與 指令以及DOM隔離開來。這是重要的一點,因爲它使得控制器視圖不可知,這極大地改進了應用程序的測試故事。

From the documentation

1

您需要$scope定義只有當你調用從html代碼功能的方法。您可以使用thissome_names而不是$scope

$scope只是意味着該功能的(mehtod的)範圍是controller函數內部和可以從控制器

裏面寫如果該功能僅在javascript (controller)裏面調用的html代碼訪問,然後使用普通清晰度

function myMethod(){}

OR

var myMethod = function(){}

聲明一個methodvariable作爲$scope變量只對從DOM訪問。如果您在$scope中創建新變量。它只是將該變量添加到$scopeclousure中作爲$scope: {first, seccond, third} 當您調用從$ closure返回的$ scope函數時。我估計沒有太多的負擔到$範圍

+0

感謝您的回答。如果某人將其聲明爲$ scope.myMethod = function(){},該怎麼辦?是否對範圍不好或不必要加載? –

+0

@Débora將'method'或'variable'聲明爲'$ scope'變量僅用於從** DOM **訪問。如果你在'$ scope'中創建一個新變量。它只是將'$ scope'的'clousure'作爲'$ scope:{first,seccond,third}'加入變量' 當你調用從'closure'返回的$ scope函數時。我想我的$範圍沒有太多的負擔 –

1

情景1。 $ scope.myMethod = function(){};
情景2。 var myMethod = function(){};

作用域是控制器和視圖之間的粘合劑。如果你真的需要 當前視圖的任何變量和方法,那麼應該將 添加到範圍變量中。如果您不想將方法添加到範圍,請參閱控制器屬性 。

方案1 如果聲明使用的範圍的方法,那麼這將是可用的/從視圖訪問。

場景2 如果您確實不需要從視圖中訪問此方法,則可以從該範圍中刪除此方法。

相關問題