У меня есть указание пользователям ставить лайки (или «добавлять в избранное») в моем приложении. Во всех своих контроллерах я использую $ rootScope. $ Emit ('name-of-function', some-id) для обновления пользовательских данных, когда им нравится новый пост, поскольку это отражено во всем моем приложении. Но я не могу использовать $ rootScope. $ Emit в директиве. Я получаю ошибку
$ rootScope. $ emit не является функцией
Предположительно событие $ rootScope. $ On, которое соответствует этой команде, еще не было вызвано, поэтому эта функция еще не существует? Что с этим можно сделать? Есть ли способ лучше устроить это?
var module = angular.module('directives.module');
module.directive('postFave', function (contentService, $rootScope) {
return {
restrict: 'E',
templateUrl: 'directives/post-fave.html',
scope: {
contentId: '@',
slug: '@'
},
link: function ($scope, $rootScope, element) {
$scope.contentFavToggle = function (ev) {
contentId = $scope.contentId;
contentService.contentFavToggle(contentId, ev).then(function (response) {
$rootScope.$emit('dataUpdated', $scope.slug);
if (response) {
$scope.favourite[contentId] = response;
} else {
$scope.favourite[contentId] = null;
}
});
};
console.log("track fave directive called");
}
};
});
с контроллера:
var dataUpdatedListener = $rootScope.$on('dataUpdated', function (event, slug) {
dataService.clearData(slug);
dataControllerInit();
});
Как я могу получить доступ к этой функции rootcope из директивы? Спасибо.
FYI - в директиве использовалась «ссылка», потому что она связана с экземпляром элемента HTML, который будет использоваться на странице несколько раз.