angularjs最佳实践 - 没有$ rootScope的指令之间的通信?

时间:2016-01-26 16:39:31

标签: javascript angularjs

所以我有一个嵌套的指令,我需要与页面上的单独指令(同一个控制器)进行通信。我尝试了隔离范围方法,但考虑到第一个指令的嵌套方式,我放弃了这种方法。我正在编写此代码,请记住$scope可能不会出现在2.0中。我的方法是否有替代解决方案适合Angular Best实践?

嵌套指令(3级深度):

$scope.chooseCard = function (selectedId) {
  this.data = 'init value';
  $rootScope.$emit('row chosen', selectedId);
  this.data = selectedId;
};

需要嵌套指令数据的内部指令#2:

$rootScope.$on('row chosen', function (e, data) {
  ctrl.id = data;
  console.log("this is the IDDDDDD", ctrl.id);
  Service.func(ctrl.id);
});

1 个答案:

答案 0 :(得分:2)

$scope可能不在身边,但绑定肯定会。您有两个主要选择:

  1. 使用服务并在那里设置这段数据,然后在子指令中观察它。这样可行,但我觉得它会损害合成和重复使用,因为你不能再有多个指令实例(它们都依赖于单例服务)。

  2. 使用前面提到的隔离范围,然后使用'&'观看绑定表达。这将是您最接近Angular2而不使用ngForward之类的东西,因为来自父级的数据流 - > child仍然是Angular2中数据绑定的主要方法。这是完成这个imo的首选方法,即使它最终会更加冗长。

  3. 无论您选择何种解决方案,请确保不泄漏内存;如果你没有取消绑定$rootScope.$on处理程序,那么每次创建指令的实例并随后销毁时,你都会泄漏内存。