所以我有一个嵌套的指令,我需要与页面上的单独指令(同一个控制器)进行通信。我尝试了隔离范围方法,但考虑到第一个指令的嵌套方式,我放弃了这种方法。我正在编写此代码,请记住$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);
});
答案 0 :(得分:2)
$scope
可能不在身边,但绑定肯定会。您有两个主要选择:
使用服务并在那里设置这段数据,然后在子指令中观察它。这样可行,但我觉得它会损害合成和重复使用,因为你不能再有多个指令实例(它们都依赖于单例服务)。
使用前面提到的隔离范围,然后使用'&'观看绑定表达。这将是您最接近Angular2而不使用ngForward
之类的东西,因为来自父级的数据流 - > child仍然是Angular2中数据绑定的主要方法。这是完成这个imo的首选方法,即使它最终会更加冗长。
无论您选择何种解决方案,请确保不泄漏内存;如果你没有取消绑定$rootScope.$on
处理程序,那么每次创建指令的实例并随后销毁时,你都会泄漏内存。