可能的原因 - 父指令共享相同的范围,这就是您的事件传播到所有子指令的原因。
解决方案 - 每个指令都应该定义自己的范围,该范围在原型上是从父级继承的。( $root <-- parent <-- child
)
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@1.4.7" data-semver="1.4.7" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script>
angular
.module('app', [])
.directive('parent', function() {
return {
scope: true,
link: function(scope, element) {
element.on('click', function() {
scope.$broadcast('parent-event');
});
}
};
})
.directive('child', function() {
return {
scope: true,
link: function(scope) {
scope.$on('parent-event', function() {
console.log('child(' + scope.$id + ') caught parent event');
});
}
};
});
</script>
</head>
<body>
<div>
<div parent> Parent {{ $id }}
<div child>Child {{ $id }}</div>
</div>
<hr />
<div parent> Parent {{ $id }}
<div child>Child {{ $id }}</div>
</div>
</div>
</body>
</html>
普朗克