繁体   English   中英

AngularJS rootScope.$emit 从指令中

[英]AngularJS rootScope.$emit from within Directive

我有一个指令让用户喜欢(或“喜欢”)我的应用程序中的帖子。 在我的控制器中,我使用 $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();
});

如何从指令中访问这个 rootscope 函数? 谢谢。

仅供参考 - 指令中使用了“链接”,因为这与将在页面上多次使用的 HTML 元素的实例相关

link具有以下签名,无需在link函数中添加$rootScope注入:

function link(scope, element, attrs, controller, transcludeFn) { ... }

link删除它,它将起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM