2014-12-19 16 views
8

Zacząłem pracować z AngularJS i obejmowałem konwencję do pisania kontrolerów z tym, a nie z $ scope. Więc moje kontrolery wyglądać następująco:

myApp.controller("SomeController", function(){ 
    this.myModel={id:-1, name:"empty"}; 
}); 

<div ng-controller="SomeController as ctrl"> 
    <input type="text" ng-model="ctrl.myModel.name" /> 
</div> 

Teraz zmienił obiekt myModel w kontrolerze w taki sposób, jak to:

this.myModel=someOtherObjectFromAForeignSource; 

... a wartość wewnątrz kontrola wejścia nie zmiana. Przeczytałem o funkcji $ apply i jej używaniu, ale ponieważ używam konwencji "this", nie mam zmiennej $ scope.

Jak wybrać metodę $ apply?

+0

Dlaczego uważasz, że potrzebujesz '$ apply()'? Skąd pochodzą te inne dane? - Twój "input" jest również ustawiony na właściwość 'name' - czy twój nowy obiekt zawiera tę właściwość? – tymeJV

+0

Tak, zawiera właściwość name - ten nowy obiekt pochodzi z kontrolki innej firmy, a kątowy nie może zarejestrować zmiany automatycznie. W każdym razie, moim pytaniem jest nadal, jak użyć metody $ apply bez użycia $ scope? –

+0

Myślę, że nie można użyć $ apply bez $ scope lub $ rootScope. – Ved

Odpowiedz

13

Z pewnością można nadal używać $ scope ze składnią controller as bez problemu.

W rzeczywistości jest to w jaki sposób obsługiwać zdarzenia ($on, $broadcast, $emit) po prostu wstrzyknąć go do kontrolera:

app.controller('MyCtrl', function($scope){ 
    //set your properties/methods as you are 
    this.message = 'foo'; 
    this.yell = function(){ 
    this.message = this.message.toUpperCase() + '!!!'; 
    }; 

    var vm = this; 
    //and use $apply as needed 
    somethingOutsideOfAngular(function(value){ 
    $scope.$apply(function(){ 
     vm.message = value; 
    }); 
    }); 
}); 
+0

Więc nadal potrzebuję wstrzykiwać $ scope, jeśli chcę użyć $ apply? Próbowałem tego tak i na pewno działa, ale myślałem, że był inny sposób. –

+0

Meteo, to prawda, ponieważ '$ apply' jest metodą na obiekcie' $ scope'. – Brocco

+1

Nie jest to dokładnie odpowiedź, której oczekiwałem, ale OK - czy może wiesz, gdzie mogę potwierdzić, że naprawdę musisz podać $ scope, by $ apply? –

Powiązane problemy