从ng-repeat中的动态值分配角度模板中的范围值

时间:2015-08-18 11:02:28

标签: angularjs ng-repeat

我遇到的问题是在ng-repeat中使用值并将该值传递给服务(http)承诺,然后使用服务的响应更新表行。

我的代码就像这样

模板:

<table class="table table-hover">
                    <thead>
                    <tr>
                        <th>Course Name</th>
                        <th>Current Section</th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr ng-repeat="course in courses" ng-init="set_current_section(course.course_id)">
                        <td>{{course.course_name}}</td>
                        <td>{{current_course}}</td>
                     </tr>
                    </tbody>
                </table>

然后我的控制器

$scope.set_current_section = function(course_id) {
    staff_service.get_start_section(course_id).then(function(result){

        $scope.current_course = result;
    })
}

和服务

this.get_start_section = function(course_id) {

    var deferred = $q.defer();

    $http.get('http://' + remoteServer + '/api/course_get_start_section/' + $sessionStorage.user_id + '/' + course_id)
        .success(function(response){ deferred.resolve(response); })
        .error(function(){ console.log('error getting start section'); })

    return deferred.promise;

}; // close create_new_section

我可以在console.log中从服务返回的值,这是正确的。但是范围值current_section对于表中的所有行都是相同的。

我的问题是,如何为动态表行设置范围值,而不是具有相同的范围名称,并导致它们都获得最后一个值?

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

将ng-init更改为:

<tr ng-repeat="course in courses">
    <td>{{course.course_name}}</td>
    <td ng-init="current_course = set_current_section(course.course_id)">{{current_course}}</td>
</tr>

你一直在主要的$ scope上设置current_course,它由ng-repeat中的所有内容共享。这就是为什么它不起作用。