繁体   English   中英

无法在ng-repeat中调用$ scope函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM