在角度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)
发出的事件。
我一直在寻找一段时间,但还没有得到解决方法。 提前谢谢。