有没有办法将$发射到直接父控制器?
我有不同的控制器,每个控制器使用一个看起来像这样的子分页指令。
.directive('pagination', function () {
return {
restrict: 'E',
templateUrl: '/Views/Shared/_Pagination.html',
scope: { pagination: "=pagination" },
controller: ['$scope', function ($scope) {
$scope.$watch('pagination.Page', function (newVal, oldVal) {
$scope.$emit('pageChanged', { page: newVal });
});
}]
}
当您更改控制器的页面时,分页指令将发送父控制器捕获的消息,并且父控制器httpGet将获取另一个页面。
问题是:如果我有控制器A,它包含子控制器B,它们都使用分页。当控制器B上的页面发生变化时,控制器B和A都将捕获该消息,因为A是B的父节点。所以,有没有办法只向最直接的父B发送消息,因为我改变了一个页面在控制器B上。
或者,如果我正在设计这个错误..请给出一些输入。谢谢!
答案 0 :(得分:3)
在您的父控制器内,您可以使用
VEG MSMC1 MSMC24 MSMC2 MSMC10
Onion 1 2 3 2
Radish 3 0 9 3
这将允许当前侦听器节点处理事件,但任何后续侦听器都不会接收它以进行处理。
stopPropagation - {function =}:调用stopPropagation函数将取消进一步的事件传播(仅适用于$ emit-ed的事件)。
由于你基本上使用的是一个回调范例,在这个范例中给定一个特定的事件,一个指令会调用一个传递给它的函数,然后你可以在你的指令范围内使用一个回调表达式。
event.stopPropagation()
声明您的指令
{
scope: { pageChanged: '&' },
link: function( $scope, elem, attrs ){
//somewhere you trigger your pageChanged logic then fire this
$scope.pageChanged({ $page: newVal })
}
}
这比使用<div pagination page-changed="parentControllerFunc($page)">
更多是 angular-ish ,因为你基本上是在尝试沟通。指令和指令所在的某个视图控制器。使用角度$emit
API更多的是尝试通过事件总线进行通信,其中成员可能知道或不能更直接地相互通信。