"控制器为"vs隔离范围

tho*_*rn̈ 18 javascript angularjs angularjs-directive angularjs-scope angularjs-controller

我想在我的指令中使用'controllerAs'选项.让我引用" Google封闭用户的AngularJS风格指南 "中的推理:

为什么?将方法和属性直接放在控制器上,而不是构建范围对象,更适合Google Closure类样式.此外,使用"controller as"可以清楚地了解当多个控制器应用于元素时您要访问的控制器.因为总有'.' 在绑定中,您不必担心原型继承掩盖原语.

但是,如果指令具有隔离范围绑定,我可以看到使用此方法的问题.

angular.module('cmw').directive('fooWidget', function() {
    return {
        controller: function() {
            this.qux = '123';
        },
        controllerAs: 'fooWidget',
        scope: {
            bar: '='
        },
        template: ' {{fooWidget.qux}}  {{bar}} '
    };
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,bar属性附加到范围,而不是附加到控制器,这导致混淆不一致的情况,其中应该在不同的位置查找不同的属性.什么是"官方"推荐的解决方法?

更新:请参阅GitHub有关此问题.

tho*_*rn̈ 8

通过将bindToController属性添加到指令API,在Angular 1.3中解决了这个问题.