我遇到的问题是在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对于表中的所有行都是相同的。
我的问题是,如何为动态表行设置范围值,而不是具有相同的范围名称,并导致它们都获得最后一个值?
非常感谢任何帮助。
由于
答案 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中的所有内容共享。这就是为什么它不起作用。