AngularJS指令可以访问控制器实例吗?

时间:2013-11-25 20:17:25

标签: javascript angularjs

AngularJS最近添加了对新“控制器”语法的支持,该语法似乎是$scope的替代品:

var app = angular.module("example", []);
app.controller("ExCtrl", function () {
    this.property = "some value";
    /* Previously you would have to inject $scope and use
    $scope.property = "some value"; */
});

如果在视图中出现了一个指令,该指令附加了一个控制器,并且您希望在指令和模型之间共享数据,那么您之前可以使用$scope

app.directive("exDirective", function () {
    return function (scope) {
        scope.property2 = "another value";
    };
});

有没有办法使用“controller as”语法并允许使用该控制器访问其范围的视图中出现的指令?

2 个答案:

答案 0 :(得分:3)

controller as语法将控制器放在具有给定名称的范围内。原型继承该范围的任何范围也将继承控制器。

小提琴示例:http://jsfiddle.net/j5P77/

具有隔离范围的指令仍然可以使用具有(我认为不优雅)$parent范围的控制器。

答案 1 :(得分:2)

“控制器为”功能将控制器发布到$ scope,并给出了名称。因此,在您的示例中,如果您有ng-controller="ExCtrl as ctrl",那么在您的指令中,您应该能够使用

访问property2
scope.ctrl.property2 = "another value";

这不是推荐的方法,因为它将指令与控制器紧密结合。更好的方法是使用隔离范围并通过属性传递属性或使用共享服务来共享数据。