scope. $ watch in einer Direktive wird nicht nach einer AJAX-Anfrage aufgerufen
Ich habe folgende Anweisung:
MyApp.directive('myFilter', ['$filter','$rootScope',
function($filter, $rootScope)
{
var dir = {};
dir.restrict = 'E';
dir.templateUrl = 'views/myFilter.html';
dir.replace = true;
dir.scope =
{
name: '@',
model: '=',
};
dir.link = function(scope,el,attrs)
{
//stuff here
}
return dir;
}]);
So rufe ich es auf:
<my-filter model="someField" name="abcd" />
Bei der Erstinitialisierung der Richtlinie wird diesomeField
ist leer. Später wird es über Ajax abgerufen und sein Wert eingetragen.
Die Frage ist, wie kann ich auf den Wert von achtensomeField
aktualisiert werden? Wenn ich das über die Link-Methode mache:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
Dies wird nur einmal aufgerufen, wenn die Direktive initialisiert wird, und der Wert ist dann leer. Wenn der Wert über Ajax abgerufen wird (von$http.get
) wird diese Uhrfunktion nicht erneut aufgerufen. Jedoch in anderen Teilen der Seite, in denen ich anzeige{{someField}}
wird dieser Wert aktualisiert, wenn eine Ajax-Anforderung abgerufen wird. Ich denke also nicht, dass das Problem damit zu tun hat$scope.apply()
nach ajax anfrage.
Bearbeiten: someField
wird in der Steuerung vergeben. Hier ist der Code:
MyApp.controller('myCtrl',
['$scope', '$rootScope', '$routeParams',
'ajax', '$filter',
function($scope, $rootScope, $routeParams, ajax, $filter)
{
var userId = parseInt( $routeParams.userId );
$scope.loaded = false;
$scope.someField = ""; //initalize with empty value
var load = function(data)
{
$scope.loaded = true;
$scope.someField = data.someField;
};
ajax.getUser(userId).success(load);
}
]);
Die Methodeajax.getUser()
tut ein$http.get()
und gibt es zurückpromise
. Im obigen Code wird dieload
Es wird eine Methode aufgerufen, die den Wert von setztsomeField
.