我有一个'master',它使用templateUrl
来指定它应该使用哪个标记。在该模板中,我使用'rows'指令在视图中布局div
。因此,'master'指令是'rows'的一种父类。
'rows'指令也使用templateUrl
。 'master'和'rows'指令在很多情况下都被重用了,但是我需要让'rows'指令在每一个中都有不同的行布局。这使我无法在'rows'指令上使用属性,因为这会产生全局影响。
我想在'master'指令中添加属性,并以某种方式传递给'rows'指令。
有没有办法可以做到这一点?我已经看过关于指令间通信的EggHead教程,但它使用'child'指令作为'parent'的属性,这对我不起作用。
我还读到我可以使用服务在两者之间进行通信,但我不清楚如何做到这一点。 Angular的$broadcast
可能会有效,但考虑到行数,可能会有很多行,如果没有连续完成,我的布局可能会受到影响。
答案 0 :(得分:1)
有些人认为你应该使用事件,但我认为在你的案例中,指令级别控制器存储数据会更好。由于您的行指令取决于您的主指令,因此您可以使用该指令,并将共享信息存储在主指令中。
module.directive('masterDir', function() {
return {
// Requiring yourself makes
// the directive level controller
// available in the link function
require: 'masterDir',
controller: function($scope) {
// The return is needed to support Angular 1.2
return this;
},
link: {
pre: function(scope, element, attrs, masterDirCtrl) {
masterDirCrtl.someAttribute = attrs.someAttributeFromTheDom;
},
post: function() {
}
}
}
});
module.directive('rowDir', function() {
return {
require: 'masterDir',
link: function(scope, element, attrs, masterDirCtrl) {
var parentDirectiveAttr = masterDirCrtl.someAttribute;
}
}
});