angularjs が ngResource カスタム URL で動作しないという事実のため、代わりに $http を試す必要があります。
私のhtmlは次のようなものです:
//html
<tr ng-repeat="person in people">
<td>{{person.name}}</td>
<td><a ng-click="changeGender(person)">{{person.gender}}</a></td>
</tr>
私の考えは、html のアンカーをクリックした後、リクエストがサーバーに送信されて更新され、ステータスが 200 で返され、ビューの性別が更新されるというものです。サービスを構築すると、次のようになります。
//factory
app.factory('changeGenderFactory', function($http, $q){
return {
getResult: function(person) {
var deferred = $q.defer();
$http({method: 'POST', url: '/resources/people/' + person.id + '/gender'}).
success(function(data, status, headers, config){
deferred.resolve(data);
}).
error(function(data, status, headers, config){
deferred.reject(status);
});
return deferred.promise;
}
};
});
これはコントローラーです:
//app
var app = angular.module('someApp', []);
//controller
app.controller('peopleCtrl', function($scope, ngResource, changeGenderFactory) {
//skip how i get $scope.people...
//$scope.people = ...(use ngResource)
$scope.changeGender = function(person) {
return changeGenderFactory.getResult(person);
};
});
ajax は正常に動作していますが、html がまったく更新されていないため、コントローラー部分に何か問題があると思います。html で ng-repeat のデータを更新するにはどうすればよいですか? ありがとうございました。