javascript - Angular 1.5 组件与子组件的特定实例进行通信?

标签 javascript angularjs

我对 Angular 很陌生,有一种特殊情况我不明白如何建模。

我有一个主要组件:

angular
  .module('synthApp')
  .component('main', {
    templateUrl: 'app/components/main.template.html',
    controller: MainController
  });

function MainController() {
  ...
}

它的 main.template.html 文件包含我拥有的另一个组件的两个实例,即 map 组件:

<div>
    ...
    <map name="foo">
    ...
    <map name="bar">
    ...
</div>

map 组件看起来像这样:

angular
  .module('synthApp')
  .component('map', {
    templateUrl: 'app/components/map.template.html',
    controller: MapController,
    bindings: {
      name: '='
    }
  });

function MapController() {
  var $ctrl = this;

  $ctrl.addMarker = function(coords, classId, popupMarkup) {
    ...
  };

  $ctrl.removeMarkers = function() {
    ...
  };
}

main Controller 的方法在某些时候需要为 foo map 调用 addMarker,而在其他时候则需要调用 addMarker 用于 bar map 。

父组件与子组件的特定实例通信的最佳实践是什么?

最佳答案

我要么设置一个带有服务的发布/订阅,要么在父级上执行 $rootScope.$emit('nameOfInstance', message) 子实例将通过 $rootScope.$on('nameOfInstance', function(message){}) 设置监听器

<div>
    ...
    <map name="foo" event-name="instance1" >
    ...
    <map name="bar" event-name="instance2" >
    ...
</div>

并在组件中添加:

 bindings: {
      name: '=',
      eventName : '@'
    }

function MapController(){
   var $ctrl = this;
   $rootScope.$on($ctrl.eventName, function(dataFromParent) {
     // do stuff based on message
   })
}

关于javascript - Angular 1.5 组件与子组件的特定实例进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43349968/

相关文章:

Javascript 循环内的递归函数

javascript - 错误 [ERR_HTTP_HEADERS_SENT] : Cannot set headers after they are sent to the client ASYNC AWAIT not Working

javascript - 将 Angular JS 与 JSP 和 Servlet 集成

javascript - NextDate 应大于前一个日期验证脚本

javascript 参数不通过函数传递

javascript - 如何使用 ajax-jquery 将选定的复选框数据获取到使用 PHP-CodeIgniter 的模态

javascript - 如何将 index.html 中的内容放入 view.html 中?

javascript - 无法在 okta POST/ session API 调用中使用 SessionToken 创建 session

angularjs - 数据未渲染,Angular JS

javascript - 类型错误 : success is not a function