Angular指令 - 何时更喜欢在指令中使用控制器?

时间:2014-04-15 07:52:47

标签: javascript angularjs architecture angularjs-directive angularjs-controller

我一直在看很多含有控制器的指令。与将相同的代码放在指令的链接函数中相比,支持/缺点/差异和用例是什么?

一个指令可以使用另一个指令' controller =>好的,但还有什么?是否只是要有一个更清洁/单独的代码?

然后,例如,在指令上添加click事件的情况下......放在哪里? (链接功能导致我可以直接访问element参数?还是在控制器中?

感谢您的澄清

1 个答案:

答案 0 :(得分:1)

在我看来,使用控制器向指令(而不是链接函数)添加行为的主要原因之一是,你无法在指令的链接函数中真正单元测试逻辑(而控制器很容易就可以了)经过测试和嘲笑。

由于控制器被注入到指令的链接函数中,您可以轻松调用(或初始化)控制器中的某些方法,并使用实际元素将行为绑定到它。

例如:

angular.module('foo', [])
.controller('MyController', function () {
    this.init = function (element) {
        element.on('click', function () {
            //do something
        });
    };
})
.directive('MyDirective', function () {
    return {
        controller: 'MyController',
        link: function (scope, elem, attrs, ctrl) {
            ctrl.init(elem);
        } 
    };
});

如果您只是添加一些应该在指令模板中显示的范围变量(即没有什么对测试非常重要) - 链接功能就可以了。

angular-ui-bootstrap中的人正在做这样做的好例子: https://github.com/angular-ui/bootstrap/tree/master/src