Angularjs $从控制器发出指令中的$ on

时间:2017-01-19 17:28:34

标签: javascript angularjs

在角度1.5中,我有一个带功能的控制器:

mobilesubmenu(element) {
    var vm = this;

    if (angular.isDefined(element.istitle)) {
        vm.$rootScope.$emit('hidemenu');

并在指令中:

restrict: 'C',
link: function($scope, $element) {
    $scope.$on('hidemenu', function (event) {
        $element.parent().parent().addClass('-hidden');

这很有效。但它会冒泡并对dom树上的父元素产生影响(嵌套菜单项:ul > li > ul > li > ul > li)。并且当指令出现在页面中时,它也会被触发多次。

我已经看到为了防止这种情况,我应该使用event.stopPropagation(); $emit$broadcast没有$emit

问题是,当控制器中的方法切换到$rootScope.$on('hidemenu', function (event) { console.log('$on in controller'); } 时,指令不再捕获该事件。

使用

在同一个控制器中进行快速测试
$emit

显示控制器很好地接收了if (position == 0)发出的事件。

我一直在寻找一段时间,但还没有得到解决方法。 提前谢谢。

0 个答案:

没有答案