2015-09-25 21 views
1

我們何時使用$ scope,而不是使用它?看起來我可以離開它,至少就控制器定義而言(參見下面的例子)。

我正確嗎?你能否提供一個例子說明這個/自己不行,我們被迫使用$ scope?

// Method 1: Not using $scope 
function LoginController() { 
    var self = this; 
    this.username = ""; 
    this.password = ""; 

    this.login = function() { 
     if((self.username === 'admin') && (self.password === 'admin')) { 
      // Do something 
     } 
    } 
} 

// Method 2: Using $scope 
function LoginController($scope) { 
    $scope.username = ""; 
    $scope.password = ""; 

    $scope.login = function() { 
     if(($scope.username === 'admin') && ($scope.password === 'admin')) { 
      // Do something 
     } 
    } 
} 
+1

第一種方法可以與'controllerAs'語法一起使用,這有一些優點。 – raina77ow

+1

http://stackoverflow.com/questions/11605917/this-vs-scope-in​​-angularjs-controllers –

+0

可能的副本還有一些其他角度函數內置到'$ scope'中,比如'$ scope。$ watch'。 – ryanyuyu

回答

4

當前角度2.0 migration path描述了一個世界上沒有$scope在不久的將來,並強烈建議您遵循角度style guide,這反過來又建議使用盡可能使用語法,以便爲潛在遷移做準備並堅持最佳實踐。

也就是說,目前有少數情況下,你使用$scope

$scope.$on 
$scope.$broadcast 
$scope.$emit 
$scope.$watch 
$scope.$apply 

沒有這些特殊情況的申請你的榜樣,所以你應該使用controllerAs代替$scope,IE:

ng-controller="MyController as MyCtrl" 

如果必須訪問$scope才能使用的一個以上方法,您可以在仍使用controllerAs語法的同時將其注入控制器:

function LoginController($scope) { 
    var self = this; 
    self.username = ""; 
    self.password = ""; 

    self.login = function() { 
     if((self.username === 'admin') && (self.password === 'admin')) { 
      // Do something 
     } 
    } 

    $scope.$on('event', function() {}); 
} 
2

方法#1被廣泛認爲是最佳實踐。儘量避免直接引用$ scope。

$ scope不在Angular 2.0中。通過避免引用它,您的最終遷移應該會變得更容易。

約翰爸爸的風格指南是最佳做法有很大的參考:https://github.com/johnpapa/angular-styleguide

+0

謝謝。因此,如果$ scope不在Agular 2.0中,$ on/$ emit/$ broadcast將如何工作?有其他選擇嗎? – Ricky

+0

我真的只在2.0上閱讀,儘管我正在努力讓自己的遷移變得更加容易,但我現在使用的是1.x版本。我看到的一般建議是儘量避免$ emit並使用$ broadcast。 –

0

可能在$ emit和$ broadcast的情況下,我們可能總是需要$ scope。

但方法1是非常有用的複雜的父母和孩子的實施,以避免混淆,是的,黑客有父母和孩子的名稱前綴,但仍然非常有用的父母和孩子的實施。

相關問題