范围变量
问题描述:
我有有这样一段代码指令:范围变量
return {
restrict: "E",
scope: {
moduleProgress: "=",
modules: "=",
parentScroll: "="
},
templateUrl: 'app/program/module.list.template.html',
link: function(scope,el,attrs,ctrl,tf) {
$templateRequest("app/program/chapter.list.template.html").then(function(template) {
var template = angular.element(template);
var elements = [];
console.log(scope);
attrs.$observe("modules", function(val) {
scope.modules.forEach(function(module) {
module.open = false;
});
});
出于某种原因,我第一次浏览到包含该指令一切正常的观点,而是从第二次起,我总是得到一个Cannot call method 'forEach' of undefined
错误。我阅读了关于SO的一些类似问题,其中提到插入属性不能立即在链接函数中获得,因此他们建议使用$observe
。我甚至在对象上添加了console.log(scope)
和modules
属性。任何想法可能会造成这种情况?
答
应该是相当$scope.$watch
宁可attrs.$observe
如$observe
在HTML指令&的隔离范围需要@
这将是modules="{{module}}"
,对于大对象DOM会搞的一团糟,所以我宁愿你使用$watch
其意义
代码
scope.$watch("modules", function(newVal) {
if(newVal){
scope.modules.forEach(function(module) {
module.open = false;
});
}
});
val.forEach()???? –
'scope.modules'是一个数组。即使它不是一个有效的方法,问题是它说我的'scope.modules'属性是未定义的。 – Thiatt
我认为你只对包含插值的属性(我敢肯定总是返回字符串)使用'$ observe',即'{{}}'。所以不要认为这将对阵列起作用。但我可能是错的。我从来没有需要使用它。 –