Angular:如何在控制器中访问元素指令的作用域

时间:2012-11-01 16:54:29

标签: javascript angularjs

鉴于这个简单的Angular模块:

angular.module('fixturesModule', [])
.directive('clubfixtures', function () {
    "use strict";
    return {
        restrict: 'E',
        replace: true,
        transclude: true,
        scope: {
            club : "@club",
            max : "@max"
        },

    templateUrl: "ClubResultsTemplate.html",

    controller: function ($scope, $http) {

        $http.get("data.json").success(function (data) {
            $scope.results = data;
        });

        $scope.sortBy = "Date";

    }
}
});

如何在控制器功能中访问club和max?

谢谢, 杰夫

2 个答案:

答案 0 :(得分:10)

使用'@'设置范围的属性,如在scope: { myAttr: '@' }中,在调用控制器函数后接收其值

您可以使用简单的setTimeout演示此内容 - 请参阅http://jsfiddle.net/Q4seC/(务必打开控制台)

$ attrs,正如您所发现的那样,在您需要时已做好准备。

有趣的是,如果你使用'='而不是'@',那么这个值已准备好并可用,这让我觉得这可能被视为Angular中的一个错误......

答案 1 :(得分:5)

提到的两个变量(maxclub)将在注入指令控制器的范围内简单定义。这意味着你可以写:

controller: function ($scope, $http) {

        $scope.max; //do sth with $scope.max
        $scope.club //so sth with $scope.club

        $http.get("data.json").success(function (data) {
            $scope.results = data;
        });
}

在你的指令控制器中。

如果你想阅读更多内容,我会建议http://docs.angularjs.org/guide/directive中的“指令定义对象”,它会在指令中讨论范围。