我有这个函数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);
};
});
答案 0 :(得分:1)
由于每个ng-repeat都创建了自己的子范围,因此无法实现。话虽这么说,任何函数调用都会导致孩子将一些变量复制到自己的范围内。你必须使用他们的parentcope或参考你的控制器的原点$scope
。
ng-click="$parent.showPopupSelectTopic(subject)"
这应该可以解决问题。但是,它有点脏。更好的解决方案是返回您的父母范围,并在每个子范围内使用它。因此,在控制器内部声明一个函数(例如$scope.getScope
)并让它只返回其$scope
。之后,您将能够正确访问它。
$scope.getScope = function() {
return $scope;
}
ng-click = "getScope().showPopupSelectTopic(subject)"
答案 1 :(得分:0)
ng-repeat仅适用于可迭代的对象,如数组或集合。在打开要重复的div之前,可以在范围内准备好iterate able对象。尝试使用ngInit而不是ngClick来初始化阵列,然后再尝试使用ngRepeat