使用ControllerAs语法从指令控制器访问父属性,无$ scope注入

时间:2015-06-09 07:31:29

标签: angularjs angularjs-directive angularjs-scope

这是来自this的后续问题。

如何从MyDirectiveController访问MyController中定义的属性以更改其值或只读取它并将其用于其他内容? (代码中的注释行)。

angular
    .module("app",[])
    .controller('MyController', MyController)
    .controller('MyDirectiveController', MyController)
    .directive('myDirective', myDirective);

function MyController() {
    var vm = this;
    vm.foo = 'fooController';
}

function myDirective() {
    return {
        restrict: 'E',
        scope: true,
        controller: MyDirectiveController,
        controllerAs: 'vm',
        template: '{{vmMy.foo}} - {{vm.foo}}'
    }
}

function MyDirectiveController() {
    var vm = this;
    vm.foo = 'fooDirective'; 

    // vmMyfoo = 'fooDirective';
}

这是jsfiddle

1 个答案:

答案 0 :(得分:2)

您可以使用bindToController(可从v1.3.x获得)设置指令将值绑定到控制器实例而不是范围对象。

function myDirective() {
    return {
        restrict: 'E',
        scope: {
            value: '='
        },
        controller: MyDirectiveController,
        controllerAs: 'vm',
        bindToController: true,
        template: '{{vm.value}} - {{vm.foo}}'
    }
}

并在HTML中将值传递给指令,如下所示:

<div ng-controller="MyController as vmMy">
    <my-directive value="vmMy.foo"></my-directive>
</div>