2014-12-19 16 views
8

Ich begann mit AngularJS arbeiten und ich habe die Konvention zum Schreiben von Controllern mit diesem, nicht mit $ Scope. Also meine Controller wie folgt aussehen:

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> 

Nun änderte ich das MyModel Objekt in der Steuerung in einer Weise, wie folgt aus:

this.myModel=someOtherObjectFromAForeignSource; 

... und der Wert innerhalb der Steuereingang nicht Veränderung. Ich lese über die $ apply-Funktion und ihre Verwendung, aber da ich die "this" -Konvention verwende, habe ich keine $ scope-Variable.

Wie rufe ich die Methode $ apply auf?

+0

Warum denken Sie, was Sie brauchen '$ apply()'? Woher kommen diese anderen Daten? - Ihre 'Eingabe' ist auch auf die Eigenschaft' name' gesetzt - enthält Ihr neues Objekt diese Eigenschaft? – tymeJV

+0

Ja, es enthält die Eigenschaft name - dieses neue Objekt stammt von einem Drittanbieter-Steuerelement, und eckig kann die Änderung nicht automatisch registrieren. Wie auch immer, meine Frage ist immer noch, wie man die $ apply-Methode ohne die Verwendung von $ scope verwendet? –

+0

Ich denke, Sie können $ apply ohne $ scope oder $ rootScope nicht verwenden. – Ved

Antwort

13

Sie können sicherlich weiterhin $ Scope mit der controller as Syntax ohne Problem verwenden.

In der Tat, das ist, wie Sie Ereignisse behandeln würde ($on, $broadcast, $emit) injizieren es nur in Ihrem Controller:

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

Also muss ich noch $ scope injizieren, wenn ich $ apply verwenden möchte? Ich habe es so versucht und es funktioniert sicherlich, aber ich dachte, es gäbe einen anderen Weg. –

+0

Meteo, das ist richtig, weil '$ apply' eine Methode für das $ scope-Objekt ist. – Brocco

+1

Es ist nicht genau die Antwort, die ich wollte, aber OK - wissen Sie vielleicht, wo ich bestätigen könnte, dass Sie wirklich $ Spielraum für $ anwenden müssen? –

Verwandte Themen