angularjs指令之间的通信

时间:2015-01-23 21:17:30

标签: angularjs angularjs-directive

我有一个'master',它使用templateUrl来指定它应该使用哪个标记。在该模板中,我使用'rows'指令在视图中布局div。因此,'master'指令是'rows'的一种父类。

'rows'指令也使用templateUrl。 'master'和'rows'指令在很多情况下都被重用了,但是我需要让'rows'指令在每一个中都有不同的行布局。这使我无法在'rows'指令上使用属性,因为这会产生全局影响。

我想在'master'指令中添加属性,并以某种方式传递给'rows'指令。

有没有办法可以做到这一点?我已经看过关于指令间通信的EggHead教程,但它使用'child'指令作为'parent'的属性,这对我不起作用。

我还读到我可以使用服务在两者之间进行通信,但我不清楚如何做到这一点。 Angular的$broadcast可能会有效,但考虑到行数,可能会有很多行,如果没有连续完成,我的布局可能会受到影响。

1 个答案:

答案 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;
        }
    }
});