angularJS-记一次如何解决父子controller 之间异步嵌套的问题

问题描述:父组件需要发送异步请求获取数据,而子组件也需要获取这个数据进行渲染工作。

方案探究:首先想到的办法是将父组件获取到的数据 data 放在 service 中,然后子组件再注入 service ,从service 中取数据 data。最先想到就是这个方法,因为对于 controller 之间的通信,最常用的办法就是通过 service 这个“桥梁”。但是通常父、子组件渲染完成之后,数据还没获取到,这样子组件的渲染就会出现问题。如果给子组件封装为一个指令,监听这个数据 data,又会显得很不合理,因为指令通常是为了复用而存在的。最后找到 $emit、$broadcast、$on 的方式,进行控制器 controller 之间基于发布订阅模式的事件处理通信机制,从而使 event 、data 在controller 之间传递的非常简单。

方案介绍:

  • $emit 只能向父组件(parent controller)传递事件 event 和数据 data,
  • $broadcast 只能向 子组件(chilid controller)传递 event 和数据 data,
  • $on 用于接收来自上述二者 event 和 data。

$emit 和 $broadcast 的使用方式一样,

$scope.$broadcast(eventType, data);
$scope.$emit(eventType, data);

$on 的使用方式

$scope.$on(receiveEventType, function(event, data){
    //....
});

 

你可能感兴趣的:(前段学习,框架学习)