我希望将指令中的范围变量作为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
};
});
我该怎么办?提前谢谢!
答案 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来访问控制器范围,这种方法总是假设你的指令总是包含在那个控制器中。
请注意。在任何情况下,您都将在指令定义函数
中使用变量