[英]Unable to call $scope function in ng-repeat
我有此功能showPopupSelectTopic(subject)
调用我的ng-repeat
html代码。 但这根本不起作用。
<div style="width:100%;" ng-controller="manageStudyCtrl">
<div class="div-subject" ng-repeat="subject in dataSubject" ng-click="showPopupSelectTopic(subject)">
<div class="round-button-subject-2">
<div class="subject-name-2 subject-eng" style="color:{{subject.subject_code.colour_code}}">
{{subject.subject_code.short_name}}
<div>{{subject.avg_overall_coverage | number : 0}}%</div>
</div>
<circular-progress
value = "subject.avg_overall_coverage"
max="100"
orientation="1"
radius="36"
stroke="8"
base-color="#b9b9b9"
progress-color="{{subject.subject_code.colour_code}}"
iterations="100"
animation="easeInOutCubic"
></circular-progress>
</div>
</div>
</div>
我想在控制器中调用我的showPopupSelectTopic(subject)
,以便可以弹出并操纵数据。
我已经从ng-repeat
以外的地方进行了工作,并且工作正常。 但是,如果我在ng-repeat
使用过,则它将无法按预期执行。 如何解决这个问题?
我的控制器:
angular.module('manageStudy', [])
.controller('manageStudyCtrl', function($scope,){
$scope.showPopupSelectTopic = function(subject) {
alert(subject.chapter_id);
};
});
由于每个ng-repeat都会创建自己的子范围,因此这是不可能的。 话虽这么说,函数调用总是会导致孩子将一些变量复制到自己的作用域中。 您必须使用他们的parentscope或引用控制器的原始$scope
。
ng-click="$parent.showPopupSelectTopic(subject)"
这应该可以解决问题。 但是,这有点脏。 更好的解决方案是将您的父母范围归还给孩子,然后像这样在每个孩子范围内使用它。 因此,在您的控制器内部声明一个函数(例如$scope.getScope
),并使其简单地返回其$scope
。 之后,您将能够正确访问它。
$scope.getScope = function() {
return $scope;
}
ng-click = "getScope().showPopupSelectTopic(subject)"
ng-repeat仅适用于可迭代的对象,例如数组或集合。 在打开要重复的div之前,可迭代对象必须已在范围中准备就绪。 尝试使用ngInit而不是ngClick初始化数组,然后再尝试ngRepeat
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.