angularjs - AngularJS 中多个子 Controller 的事件命名空间

标签 angularjs events namespaces angularjs-scope

我正在尝试命名由多个相同类型的子 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/

相关文章:

css - 如何用背景颜色显示 md-toast

angularjs - Angular 动画不起作用

java - 从 jcombobox 中移除焦点后,itemlistener 获取事件

C# 在添加的线程中触发事件

c++ - 使用 g++ : 'malloc' was not declared in this scope 时出错

xml - 如何将快捷方式命名空间添加到我的 xml 文档中

c++ - 两次使用命名空间

javascript - 从 AngularJS 中的 View 调用 Controller 函数

javascript - 如何将第一个选择选项设置为始终为空

Javascript removeEventListener 不工作 - 事件监听器仍然存在