2015-09-17 8 views
5

Können sagen, ich habe folgenden Controller

angular.module('scopeExample', []) 
    .controller('MyController', ['$scope', function ($scope) { 
     $scope.username = 'World'; 

     $scope.sayHello = function() { 
      $scope.greeting = 'Hello ' + $scope.username + '!'; 
     }; 
}]); 

gibt es keinen Grund, warum ich nicht Objektliterale

angular.module('scopeExample', []) 
    .controller('MyController', ['$scope', function ($scope) { 
     $scope.viewModel = { 
      greeting: '', 
      username: 'World', 
      sayHello: function(){ 
       this.greeting = 'Hello ' + this.username + '!'; 
      } 
     }; 
}]); 

Antwort

2

Sie könnten versuchen, this statt $scope verwenden. Durch die Verwendung der Controller Als Deklaration in Ihren Ansichten werden Sie auch mit einer Punktnotation in Ihren Ansichten enden.

Ihr Controller-Code könnte dann am Ende aussieht wie folgt aus:

angular.module('scopeExample', []) 
    .controller('MyController', function() { 
    var self = this; 
    this.greeting = ''; 
    this.username = ''; 

    this.getName = function() { 
     self.greeting = 'Hello ' + self.username + '!'; 
    }; 
}]); 

Mit dem Controller Als Erklärung Ihrer Ansicht nach in den folgenden führen:

<div data-ng-controller="UserController as user"> 
     Hello {{ user.username }} 
</div> 

So in diesem Beispiel Sie haben weniger Code, aber Sie behalten die Punktnotation in Ihren Ansichten bei.

Bitte beachten Sie, dass die Controller Als Funktionalität nicht zur Verfügung steht vor Angular 1.2.0

+1

nur um hinzuzufügen, die ControllerAs Syntax ist der erste Schritt in jedem offiziellen Video-Segment zeigt Konvertieren von einer eckigen 1.x App in eine eckige2 App, so dass ControllerAs verwenden Sie näher an der Kompatibilität aus der Box sein, und ist die bevorzugte Syntax für das interne eckige Team. – Claies

0

Warum würden Sie verwenden soll, wollen um mehr Code zu deinem HTML hinzuzufügen. Sie müssen auf eine bestimmte Variable zugreifen, indem Sie {{viewModel.username}} verwenden.

Um dies zu vermeiden Sie auch, wie diese

angular.module('scopeExample', []) 
    .controller('MyController', ['$scope', function ($scope) { 
     var viewModel = { 
      greeting: '', 
      username: 'World', 
      sayHello: function(){ 
       this.greeting = 'Hello ' + this.username + '!'; 
      } 
     }; 
     angular.extend($scope, viewModel); 
}]); 

Aber ich denke, die erste Methode, diese Notation Code könnte zu lesen einfacher ist dann. Aber es gibt keinen größeren Schaden bei der Verwendung eines der Ansätze.

+0

Ich denke auch, die erste ist einfacher zu lesen, aber das ist wahrscheinlich nur wegen des Beispiels, das ich verwenden. Ich benutze Objektliterale sehr, weil es eine nette Art ist, Ihren Code zu organisieren. Aber ich sehe es nie wirklich in eckigen Codebeispielen – R4nc1d

+0

Die meisten angularJs Devs kommen normalerweise vom Javascripthintergrund. Ich denke also, dass sie den ersten Weg anpassen und deshalb enthält die Dokumentation einen Code, der dem von Beispiel 1 ähnelt. Aber jedes Individuum hat seine eigenen Präferenzen. –

2

Ich persönlich lieber Objekt Literal statt alles $ Scope zu binden. Seine überschaubare und gute Praxis.

angular.module('scopeExample', []) 
.controller('MyController', ['$scope', function ($scope) { 
    var viewModel = { 
     greeting: '', 
     username: 'World' 
    }; 

    viewModel.sayHello = function() { 
     this.greeting = 'Hello ' + this.username + '!'; 
    }; 
    $scope.viewModel = viewModel; 
}]); 
+0

Ah, das ist eine nette Art, es zu tun. – R4nc1d

Verwandte Themen