angularjs $resource 是否应该包装在工厂中?为什么不服务?

Should an angularjs $resource be wrapped in a factory? Why not service?

为什么 $resource 应该被 .factory 使用?为什么 .service 是错误的方法?

例如

app.factory('Notes', ['$resource', function($resource) {
return $resource('/notes/:id', null,
    {
        'update': { method:'PUT' }
    });
}]);

为什么错了?

app.service('Notes', ['$resource', function($resource) {
return $resource('/notes/:id', null,
    {
        'update': { method:'PUT' }
    });
}]);

两者都是单例,但是services是使用new关键字实例化的。 如果您要使用 service,您将无法访问 $resource 的静态 class 方法,这取决于您的应用程序可能更好。

换句话说,您将无法使用:

Notes.query({ ... });
Notes.create({ ... });

和其他 class 函数变体。只有实例方法如:

note.$get()
note.$save()
note.$update()