angularjs - 使用 ControllerAs 语法从指令 Controller 访问父属性并且没有 $scope 注入(inject)

标签 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 .

最佳答案

您可以使用 bindToController (从 v1.3.x 开始可用)设置指令以将值绑定(bind)到 Controller 实例而不是范围对象。

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>

关于angularjs - 使用 ControllerAs 语法从指令 Controller 访问父属性并且没有 $scope 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725634/

相关文章:

angularjs - Ionic - 跨源请求被阻止问题

javascript - 模块化 Angular 模板

javascript - AngularJs 指令,它在内部创建带有数据对象的新指令

javascript - 无法从 codenvy 预览/运行 angular.js 项目

javascript - 将 json 导出到 CSV 在 angularjs 中不起作用

angularjs - Node.js在 Protractor 中有什么用?

angularjs - 使用纯 angularjs 实现自动完成,无需任何依赖

javascript - angular ng-class 有两个类,一个来自变量名,一个有条件

javascript - 使用指令创建隔离范围

javascript - 为什么在 angularjs 中 $http.post 的成功或错误回调函数没有正确执行