最近ng-resourceの学習が始まりました。私は、通常のAngularJSアプリケーションをng-resourceを使用するアプリケーションに変換するときに正しい方向にいるかどうか疑問に思っています。AngularJSからng-resourceを使ってコントローラとサービスを正しく変換する方法
これは(NG-リソースを使用せずに)私の古いhome.js
コントローラです:
angular.module("HomeApp", ["BaseApp"])
.controller("MainCtrl", ["$http", "$window", "BaseService", function($http, $window, BaseService) {
var self = this;
BaseService.fetch.posts(function() {
self.posts = BaseService.posts;
self.cerrorMessages = BaseService.cerrorMessages;
});
self.like = function(id, postType) {
BaseService.like(id, postType, function() {
self.cerrorMessages = BaseService.cerrorMessages;
});
};
}]);
そして、これは私の古いbase.js
(BaseService)です:
angular.module("BaseApp", [])
.factory("BaseService", ["$http", "$window", function($http, $window) {
var self = this;
self.posts = [];
self.cerrorMessages = [];
self.accessErrors = function(data) {
self.cerrorMessages = [];
for (prop in data) {
if (data.hasOwnProperty(prop)){
self.cerrorMessages.push(data[prop]);
}
}
};
self.fetch = {
posts: function(callback) {
$http.get('/posts/')
.then(function(response) {
self.posts = response.data;
callback();
}, function(response) {
self.accessErrors(response.data);
callback();
});
}
};
self.like = function(id, postType, callback) {
$http.post("/" + postType + "/" + id + "/like/")
.then(function(response) {
angular.forEach(self.posts, function(post, index, obj) {
if (post.id == id) {
post.usersVoted.push('voted');
post.voted=true;
};
});
}, function(response) {
self.accessErrors(response.data);
callback();
});
};
return self;
}]);
私は、私は大いに利益を得ることができることを言われました私はRESTfulなバックエンドを持っているので、ng-resourcesを使用することはできません。上記のコードをng-resourceを使用して変換しようとしましたが、これが私の現在のものです。
angular.module("BaseApp", [])
.factory("BaseService", ["$http", "$window", function($http, $window) {
var self = this;
self.posts = [];
self.cerrorMessages = [];
self.accessErrors = function(data) {
self.cerrorMessages = [];
for (prop in data) {
if (data.hasOwnProperty(prop)){
self.cerrorMessages.push(data[prop]);
}
}
};
return self;
}]);
は、右のトラックに私をアム:
angular.module('PostsResources', ['ngResource'])
.factory('PostsFactory', function($resource) {
return $resource('/posts/:postId', { postId:'@id' });
});
.factory('PostLikeFactory', function($resource) {
return $resource('/posts/:postId/like', { postId:'@id' });
});
そして、これは私のコントローラ(home.js
)である:これは私のresources.js
ある
angular.module("HomePageApp", ["BaseApp", "PostsApp"])
.controller("MainCtrl", ["$http", "$window", "BaseService", "PostsResource", "PostLikeResource", function($http, $window, BaseService, PostsResource, PostLikeResource) {
var self = this;
function loadPosts() {
self.posts = PostsFactory.query(function(data) {},
function(error) {
BaseService.accessErrors(error.data);
self.cerrorMessages = BaseService.cerrorMessages;
}
);
};
self.like = function likePost() {
PostLikeFactory.save(function(data) {
angular.forEach(self.posts, function(post, index, obj) {
if (post.id == id) {
post.usersVoted.push('voted');
post.voted=true;
};
});
}, function(error) {
BaseService.accessErrors(error.data);
self.cerrorMessages = BaseService.cerrorMessages;
}
)};
そして、これは私のBaseService(base.js
)であります通常のAngularJSアプリをng-resourceに変換する私には、必要なコードの量が同じように見えるようです。前もって感謝します!
主なポイントは、User = $ resource( '/ user') - > User.get()、User.post ...です。各URL - ng-resourceからの利益はそれほどありません。 –