在我的情况下,如何在指令中设置$emit

How to setup $emit in directive in my case

本文关键字:设置 emit 指令 我的 情况下      更新时间:2023-09-26

我正在尝试在我的代码中使用$emit作为指令。

我有

(function () {
    angular
        .module('myApp')
        .directive('testDirective', testDirective);
    function testDirective() {
        var directive = {
            link: link,
            restrict: 'A',
            controller: testCtrl,
            controllerAs: 'vm'
        };
        return directive;
        function link(scope, element, attrs) {
        }
    }
    function testCtrl() {
        var vm = this;
        // do something
        vm.$emit('someEvent', {'id': '123'})
    }
})();

但是,我得到了"TypeError: vm.$emit is not a function"。我不确定如何解决这个问题。谁能帮忙?多谢!

controllerAs只是意味着作用域变量直接附加到控制器 - 这并不意味着控制器本身就是角度作用域的实例。 在这种情况下,您需要将作用域注入控制器,然后从示波器上发出事件:

function testCtrl($scope) {
    // do something
    $scope.$emit('someEvent', {'id': '123'})
}

还要注意,正常的注入规则适用 - 如果你要缩小它,你可能需要这样的东西:

testCtrl['$inject'] = ['$scope'];