如何在指令中使用范围的变量?

时间:2014-06-21 01:45:36

标签: javascript angularjs scope angularjs-directive

我希望将指令中的范围变量作为javascript变量。 这是我的代码:

app.controller("Home", ["$scope", function($scope) {
    ...
    $scope.nb_msg = data.length;
    ...
}]);

app.directive("myDiv", function() {
    // Here, i want to get $scope.nb_msg
    var nb_msg = ???;
    var result = [];
    // do something with nb_msg to get result
    var template = "";
    ...
    for(var i=0; i<10; i++) {
        template += "<span>" + result[i] + "</span>";
    }
    ...

    return {
        restrict: "E",
        template: template
    };
});

我该怎么办?提前谢谢!

2 个答案:

答案 0 :(得分:2)

您可以在链接功能中访问范围:

app.directive("myDiv", function() {    
    return {
        restrict: "E",
        template: '<span ng-repeat="i in result">{{i}}</span>',
        link: function(scope, element, attr) {

             // Here, i want to get $scope.nb_msg
             var nb_msg = scope.nb_msg;
             scope.result = [];
             for(var i=0; i<10; i++) {
                 scope.result.push(i);
             }


        }
    };
});

答案 1 :(得分:0)

如果你的指令没有创建一个隔离的范围,那么变量将在指令控制器,编译和链接函数中可用。

如果你的指令确实创建了一个孤立的作用域你不能,不是那样,指令不知道outide控制器,所以他们不能访问控制器变量,你有其他选择

1st - 如果要提供双向绑定,请使用控制器变量作为指令的属性值,并使用范围内的“=”进行链接;

第二 - 将变量放在服务中共享,并将其注入控制器和指令。

3rd - (少推荐)使用scope。$ parent来访问控制器范围,这种方法总是假设你的指令总是包含在那个控制器中。

请注意。在任何情况下,您都将在指令定义函数

中使用变量