为了简化起见,我想实现的唯一功能是获取所有用户并通过注入的工厂将它们传递给控制器。
我将用户存储在json文件中(现在我只想读取该文件,而不修改数据)。 users.json:
[
{
"id": 1,
"name": "user1",
"email": "a@b.c"
},
{
"id": 2,
"name": "user2",
"email": "b@b.c"
}
]
我要编写的工厂应该是这样的:
UsersFactory:
app.factory('usersFactory', ['$http', function ($http) {
return {
getAllUsers: function() {
return $http.get('users.json').then(
function(result) {
return result.data;
},
function(error) {
console.log(error);
}
);
}
};
}]);
最后,控制器调用将如下所示: UsersController
app.controller('UsersCtrl', ['$scope', 'usersFactory', function($scope, usersFactory){
usersFactory.getAllUsers().then(function (result) {
$scope.users = result;
});
}]);
我在网上搜索了一下,似乎这样使用工厂方法并不是一个好的实践方式。如果我想实现更多的功能,例如将新用户添加/删除到/从数据源中,或者以某种方式在工厂内部存储数组,那么这并不是正确的方法。我看到有些地方使用工厂的方式是像new UsersFactory()
这样的。
在尝试消耗API时,正确使用工厂方法应该怎么做呢?
是否可以使用包含$http.get()
结果的对象初始化工厂,然后在控制器中这样使用它?
var usersFactory = new UsersFactory(); // at this point the factory should already contain the data consumed by the API
usersFactory.someMoreFunctionality();
$resource
来调用API,因为它在处理RESTful API时可以为你做很多工作。但是,在你的情况下,由于你只是在处理一个普通的JSON文件,所以简单的HTTP应该就足够了。你并没有在调用API。 - Kevin BgetAllUsers()
调用,还是只有在应用程序的生命周期中进行一次调用? - allienx