我有一个使用以下 ng-click 指令渲染的模型列表:
<div id="pair" ng-repeat="question in session.questions | filter:{'answered':qfilter}">
在每个问题中,我都有一个投票按钮,它在点击时调用投票方法:
<a href="#" ng-click="vote(question, 1)" ng-class="{upvote: question.score == 1}">▲</a><br/>
请注意,这个 ng-click 指令将问题变量传递给我的函数。
这是投票功能:
$scope.vote = function(question, val){
$scope.apply(function(){
if(question.vote == val){
question.vote = 0;
}else{
question.vote = val;
}
$http({
method: 'POST',
url: question.resource_uri+"vote/",
data: $.param({vote:question.vote}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
})
}
该函数调用正常,帖子提交成功。唯一的问题是,即使在运行 $scope.apply 之后,question.vote 的值仍然没有在 UI 中更新。我猜它与 ng-repeat 复制数组有关,因此修改新问题并不会反过来修改范围内的问题。
我还尝试通过返回投票并使用此 ng-click 来更新内联范围:
<a href="#" ng-click="question.vote = vote(question, -1)" ng-class="{downvote: question.score == -1}">▼</a>