Я хочу, чтобы иметь возможность уведомлять директиву, когда событие происходит, чтобы изменить то, что отображает директива. Я знаю, что директивы запускаются только один раз, поэтому мне интересно, как я это сделаю. Я также не уверен, следует ли использовать $emit или $broadcast, является ли директором дочерний элемент контроллера?
Например, в моем контроллере у меня есть:
$rootScope.$emit('PHOTO_UPLOADED', photo);
И в моей директиве:
.directive('photo', [function () {
return {
restrict: 'EA',
scope: {user: '='},
replace: true,
template: '<div id="{{user.id}}"></div>',
link: function ($scope, element, attrs) {
var thumbnail = ($scope.user && $scope.user.image)
? $scope.user.image
: '/default.png';
element.css('background-image', 'url(' + thumbnail + ')');
$rootScope.$on('PHOTO_UPLOADED', function(event, data) {
thumbnail = data;
});
}
};
}])
Я попытался сделать это, но ничего не произошло, миниатюра не была обновлена, так как директива уже выполнялась.