我想在我的指令中使用'controllerAs'选项。让我引用“An AngularJS Style Guide for Closure Users at Google”的推理:
为什么?将方法和属性直接放到控制器上, 而不是建立范围对象,更适合谷歌 关闭类风格。此外,使用'controller as'可以实现 很明显,当多个控制器访问哪个控制器时 适用于元素。因为总有'。'在绑定中,你 不必担心原型继承掩盖原语。
但如果指令具有隔离范围绑定,我可以看到使用此方法的问题。
angular.module('cmw').directive('fooWidget', function() {
return {
controller: function() {
this.qux = '123';
},
controllerAs: 'fooWidget',
scope: {
bar: '='
},
template: ' {{fooWidget.qux}} {{bar}} '
};
});
在这种情况下,bar
属性附加到作用域,而不附加到控制器,这会导致混淆不一致的情况,即应在不同的位置查找不同的属性。什么是“官方”推荐的解决方法?
更新:请参阅GitHub issue了解相关信息。
答案 0 :(得分:2)
很难找到这样做的“官方”模式。就个人而言,我认为这取决于你的目标是什么。
如果您想将指令中的信息暴露给外界,请使用隔离范围,因为这是其中的原因之一。 “API”也不必在指令中完全定义,它可以在AngularJS服务中定义,您将其注入指令并通过隔离范围公开,即使您拥有主要关注UI的指令以及处理任何业务逻辑的服务。
如果您在指令之间进行通信,则首选控制器。
但是,为了尝试获取更多官方信息,以下是AngularJS网站上有关使用带指令的控制器的信息:
最佳实践:当您希望将API公开给其他指令时,请使用控制器。否则使用链接。
我个人从未见过控制器被用于指令,除了指令到指令通信。我不是说你不能使用它们,我只是没有看到它。此外,如果您想将Controller逻辑暴露给外部世界,那么您将不得不绑定到隔离的范围,所以这一切都取决于您想要做什么。