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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage