所以,我有一个应用程序几乎弄清楚,直到我意识到我正在让许多调用数据库api,因此应用程序滞后。我正在尝试设置一种方法,以便在$ scope对象中添加和删除项目时保持当前范围的准确性,而不必每次都从数据库请求整个列表。所以我从所有的内容中得知,工厂是要走的路。这样我就可以从数据库中提取一次数据,然后在通过api成功添加或删除条目后,我可以操作当前范围,而不是再次请求整个列表。我的问题是(有一个例子),如何从api中获取用户列表并将其添加到范围。然后,当我从列表中添加或删除用户时,我可以从范围中删除它们,而无需再次从api中获取列表?
这是我的工厂:
app.factory("UsersFactory",['Data',function(Data){
var users;
function init(){
Data.get('users')
.then(function (results) {
users = results;
});
}
init();
function getUsers(){
return users;
}
return {
getUsers:getUsers
}
}]);
在控制器中注入工厂后:
console.log(UsersFactory.getUsers);
返回函数但不返回函数的返回值。
我也尝试过:
console.log(UsersFactory.getUsers());
返回undefined;
我真的想在解决状态(ui-router)时完成所有这些操作,但在控制器中我也可以直接测试。
任何帮助都是ap;感谢并随时请我澄清任何事情。我不是很擅长明确提问。
答案 0 :(得分:3)
执行此操作的正确方法是从factory
:
app.factory("UsersFactory", ['Data', function(Data) {
var factory = {
getUsers: getUsers
};
return factory;
function getUsers() {
return Data.get('users');
}
}]);
然后,在controller
:
app.controller("UsersController", ['$scope', 'UsersFactory', function($scope, UsersFactory) {
function getResponse(response) {
$scope.users = response.data;
}
function getError(response) {
console.log(response);
}
UsersFactory.getUsers()
.then(getResponse);
.catch(getError);
}]);
答案 1 :(得分:-1)
厂:
app.factory("UsersFactory",function(Data) {
UpDateUserinfo:function(){
var inf;
inf=Data.get('users');
return inf;
}
})
控制器:
app.controller("UsersController", function($scope, UsersFactory){
UsersFactory.UpDateUserinfo().$promise.then(function(data){
$scope.users=data
})
})