2015-09-17 21 views
5

i nesne değişmezleri

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

cevap

2

Sen this yerine $scope kullanarak deneyebilirsiniz. Denetleyicisini kullanarak, görünümlerinizde bildirimi olarak görüntünüzde bir nokta gösterimi ile sonuçlanacaktır.

Kişisel kontrolör kod sonra benzeyen sonunda olabilir aşağıdaki:

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

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

aşağıdaki neden olacaktır görünümünde beyanı olarak Kontrol kullanma: Bu örnekte Yani

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

Daha az kodla sonuçlanırsınız, ancak nokta notasyonunu görünümlerinizde tutarsınız.

işlevselliği gibi Denetleyici Ben de ilki daha kolay okunur ama bu sırf ben kullanılan örnek muhtemelen düşünüyorum

+1

sadece bunu eklemek için, ControllerAs sözdizimi, bir açısal 1.x uygulamasından bir angular2 uygulamasına dönüştürmeyi gösteren her resmi video segmentindeki ilk adımdır, böylece ControllerA'ları kullanmak sizi kutudan uyumlu hale getirecek ve iç açısal ekip için tercih edilen sözdizimi. – Claies

0

neden istiyorsun kullanmamalısınız herhangi bir neden yoktur aşağıdaki kontrolörü

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

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

kullandığınızı varsayalım HTML'nize daha fazla kod eklemek için. Belirli bir değişkeni {{viewModel.username}} kullanarak erişmeniz gerekecek.

ayrıca bu

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

gibi kod olabilir Bunu önlemek için Ama ilk yöntem sonra bu gösterimi okuma daha kolay olduğunu düşünüyorum. Ancak, yaklaşımlardan herhangi birinin kullanılmasında büyük bir zarar yoktur.

+0

1.2.0 öncesi Açısal mevcut olmadığını unutmayınız. Nesne değişmezlerini çok kullanıyorum çünkü kodunuzu düzenlemenin güzel bir yolu. Ama ben kesinlikle açısal kodlama örneklerinde göremiyorum – R4nc1d

+0

Çoğu angularJs devleri genellikle Javascript arka planından gelir. Bu yüzden, ilk yolu uyarladıklarını ve bu nedenle, dokümanların örnek 1'e benzer bir kod içerdiğini düşünüyorum. Ancak her bireyin kendi tercihi vardır. –

2

Şahsen, herşeyi $ kapsamını bağlamak yerine, nesne değişmezini kullanmayı tercih ediyorum. Yönetilebilir ve iyi uygulama.

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 Bunu yapmanın güzel bir yolu. – R4nc1d