カスタム更新メソッドを持つリソースがあります:
angular.module('user.resources', ['ngResource']).
factory('User', function($resource) {
var User = $resource('/user/:id', {}, {
update: {
method: 'PUT'
}
});
User.prototype.update = function(cb) {
console.log('foo');
return User.update({
id: this._id
}, angular.extend({}, this, {
_id: undefined
}), cb);
};
このリソースをスコープを介してカスタム ディレクティブに渡します。
directive('avatarUpload', function($http) {
return {
restrict: 'E',
scope: {
model: '='
}, ...
そして、btn クリックでディレクティブ コントローラーの update メソッドを呼び出しています。
$scope.model.update(function() {
console.log('bar');
});
私を困惑させる動作は、最初にボタンをクリックすると「foo」が表示されますが「bar」は表示されず、2回目にクリックすると「bar」が表示され、次に「foo」が表示されます。これ以上クリックすると、常に「bar」、次に「foo」が印刷されます。
PUT リクエストは、2 回目以降のクリックでのみ発生し、最初のクリックでは発生しません。
注:ディレクティブから呼び出そうとするまで、コントローラーでそのリソース更新メソッドを正常に使用してきました。私はAngular 1.1.4を使用しています。ディレクティブを異なるタイプのリソースで機能させたいので、このリソースの受け渡しを行います。