AngularJS rootScope.$从指令中发出
AngularJS rootScope.$emit from within Directive
我有一个指令让用户在我的应用程序中点赞(或 "fave")post。在我的控制器中,我使用 $rootScope.$emit('name-of-function', some-id) 在用户喜欢新的 post 时更新用户数据,因为这反映在我的整个应用程序中。但我似乎无法在指令中使用 $rootScope.$emit 。我收到一个错误
$rootScope.$emit is not a function
估计是这个命令对应的$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();
});
如何从指令中访问这个根作用域函数?谢谢。
仅供参考 - "link" 已在指令中使用,因为这与 HTML 元素的实例相关,该元素将在页面上多次使用
link
具有以下签名,无需将 $rootScope
注入添加到 link
函数中:
function link(scope, element, attrs, controller, transcludeFn) { ... }
将其从 link
中删除,它将起作用。
我有一个指令让用户在我的应用程序中点赞(或 "fave")post。在我的控制器中,我使用 $rootScope.$emit('name-of-function', some-id) 在用户喜欢新的 post 时更新用户数据,因为这反映在我的整个应用程序中。但我似乎无法在指令中使用 $rootScope.$emit 。我收到一个错误
$rootScope.$emit is not a function
估计是这个命令对应的$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();
});
如何从指令中访问这个根作用域函数?谢谢。
仅供参考 - "link" 已在指令中使用,因为这与 HTML 元素的实例相关,该元素将在页面上多次使用
link
具有以下签名,无需将 $rootScope
注入添加到 link
函数中:
function link(scope, element, attrs, controller, transcludeFn) { ... }
将其从 link
中删除,它将起作用。