我正在尝试命名由多个相同类型的子 Controller 发出的事件。问题是让 parent 知道 child 的 ID。考虑以下场景。
<div ng-controller="Parent">
<div ng-include="child1"></div>
<div ng-include="child2"></div>
... and so on, the parent decides which templates to include on the fly
</div>
<script type="text/ng-template" id="Child.html">
<div ng-controller="Child">...</div>
</script>
function Parent($scope) {
$scope.child1 = "Child.html";
$scope.child2 = "Child.html";
// The problem is setting these
$scope.childId1 = 1;
$scope.childId2 = 2;
$scope.on($scope.childId1 + ".someEvent", function() {
// Handle event from child 1
});
$scope.on($scope.childId2 + ".someEvent", function() {
// Handle event from child 2
});
}
function Child($scope) {
$scope.id = getNewId();
// Here I would like to do something like
$parent[someKey] = $scope.id;
// So that I can emit events like this
$scope.someEvent = function() {
$scope.$emit($scope.id + ".someEvent", data);
}
}
所以我认为这个问题有两个部分。
1.) 如何将 someKey 从父级传递给子级。
2.) 如何从子级中在父级作用域上设置 someKey。想避免使用 $parent。甚至不确定这个变量在 Controller 中是否可用?
最佳答案
使用消息传递您要使用的 id
我会在你的 parent 中切换你的“$on”消息,看起来像这样:
$scope.on(".someEvent", function(event,data,id) {
switch(id) {
case 1:
// Handle event from child 1
case 2:
// Handle event from child 2
}
});
您发出的消息如下所示:
$scope.someEvent = function() {
$scope.$emit(".someEvent", data, $scope.id);
}
关于angularjs - AngularJS 中多个子 Controller 的事件命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21424028/