在我的例子中如何设置$ emit in directive

时间:2016-03-09 05:58:36

标签: javascript angularjs

我正在尝试在代码中使用$ 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'。我不知道如何解决这个问题。有人可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:4)

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

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

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

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