scope. $ watch в директиве не вызывается после AJAX-запроса
У меня есть следующая директива:
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;
}]);
Вот как я это вызываю:
<my-filter model="someField" name="abcd" />
Когда директива впервые инициализируется,someField
пустой. Позже, он извлекается через ajax, и его значение заполняется.
Вопрос в том, как я могу следить за значениемsomeField
быть обновленным? Когда я делаю это из метода ссылки:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
Это вызывается только один раз, когда инициализируется директива, и значение тогда пусто. Когда значение извлекается через ajax (из$http.get
), эта функция часов больше не вызывается. Тем не менее, в других частях страницы, где я показываю{{someField}}
, это значение обновляется при получении ajax-запроса. Так что я не думаю, что проблема связана с выполнением$scope.apply()
после запроса ajax.
Редактировать: someField
назначен в контроллере. Вот код:
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);
}
]);
Методajax.getUser()
делает$http.get()
и возвращает егоpromise
, В приведенном выше кодеload
вызывается метод, который устанавливает значениеsomeField
.