Javascript 角度:如何访问元素指令';s在控制器中的作用域
给定这个简单的角度模块:Javascript 角度:如何访问元素指令';s在控制器中的作用域,javascript,angularjs,Javascript,Angularjs,给定这个简单的角度模块: angular.module('fixturesModule', []) .directive('clubfixtures', function () { "use strict"; return { restrict: 'E', replace: true, transclude: true, scope: { club : "@club",
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
谢谢,
Jeff上述两个变量(max
和club
)将在注入指令控制器的范围内简单定义。这意味着您可以编写:
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;
});
}
在指令的控制器中
如果您想了解更多信息,我建议在中使用“指令定义对象”,它在其中讨论指令中的作用域。作用域上的属性设置为“@”,如
作用域:{myAttr:'@}
在调用控制器函数后接收它们的值
您可以通过一个简单的setTimeout来演示这一点-请参阅(确保打开控制台)
正如您所发现的,$attrs在您需要时随时可用
有趣的是,如果您使用“=”而不是“@”,那么该值已准备就绪且可用,这使我认为这可能被认为是Angular中的一个bug…在哪个控制器函数中?在指令的控制器函数中?或者在指令父级的控制器函数中?在分配给上例所示的
控制器的函数($scope,$http)
中。具体来说,club
值将构成$http.get
路径的一部分,感谢您花时间回复。但是,当我添加console.log($scope.club)时代码>对于控制器函数,我只是将未定义作为输出。我需要查看更多代码以获得更多帮助,特别是指令在HTML中的使用方式以及在使用它的范围内有哪些数据可用。您认为有可能为JSFIDLE/plunk提供实时代码吗?我一直在通读,似乎您可以访问$attrs。将$attrs
添加到函数($scope,$http,$attrs)
和console.log($attrs.club)
成功了。@pkoz我自己也有同样的问题,$scope.max
未定义。那么您必须在指令的控制器内使用$attrs
而不是$scope
?这是访问属性的唯一方法吗?我也是这么想的。感谢您为我澄清这一点。+1因为这是最有用的答案,尽管它仍然无法确认为什么这些作用域属性在控制器函数点处未定义。确认为bug?还有更多的信息吗?这似乎很不受欢迎,我还没有找到一个技术原因。我在寻找一种默认@
-传递的字符串值的方法时遇到了这个问题。我见过的处理这个问题的最正式的方法是使用。执行类似以下操作:attrs.$observer('prop',function(val){scope.prop=val | | |'default'})
将更新{{prop}}
绑定,并可能提供所需的结果,尽管不是立即在postLink
上。