2015-09-17 18 views
5

Diciamo che ho il seguente controller

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

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

v'è alcuna ragione per cui non dovrei utilizzare letterali oggetto

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

risposta

2

Si potrebbe provare a utilizzare this invece di $scope. Usando la dichiarazione Controller As nelle proprie viste, si otterrà anche una notazione con punti nelle viste.

Il codice di controllo potrebbe quindi finire per assomigliare il seguente:

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

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

Utilizzando la controller come dichiarazione a suo avviso comporterà la seguente:

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

Quindi in questo esempio si finisce con meno codice, ma si mantiene la notazione dei punti nelle proprie visualizzazioni.

Si prega di notare che il controller come funzionalità non è disponibile pre angolare 1.2.0

+1

solo per aggiungere a questo, la sintassi ControllerAs è il primo passo in ogni segmento di video ufficiale che mostra la conversione da un'app angolare 1.x a un'app angular2, quindi l'utilizzo di ControllerAs ti avvicina alla compatibilità con la scatola, ed è la sintassi preferita per il team angolare interno. – Claies

0

perché si vuole portata per aggiungere più codice al tuo codice HTML. Dovrai accedere a una particolare variabile usando {{viewModel.username}}.

per evitare questo si potrebbe anche codice come questo

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

ma penso che il primo metodo è più facile da leggere, allora questa notazione. Ma non c'è alcun danno maggiore nell'usare uno qualsiasi degli approcci.

+0

Penso anche che il primo è più facile da leggere, ma questo è probabilmente solo a causa dell'esempio che ho usato. Uso molto i letterali degli oggetti perché è un buon modo per organizzare il codice. Ma non lo vedo mai in esempi di codifica angolare – R4nc1d

+0

La maggior parte degli sviluppatori angularJs di solito provengono da sfondo Javascript. Quindi penso che si adattino al primo modo e questo è il motivo per cui i documenti contengono codice simile all'esempio 1. Ma ogni individuo ha le sue preferenze. –

2

Personalmente preferisco usare letteralmente l'oggetto piuttosto che associare tutto $ scope. È gestibile e buona pratica.

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 questo è un bel modo per farlo. – R4nc1d

Problemi correlati