usuariosFactory.getUsers
является асинхронной функцией из-за $http.get
внутри.Итак, чтобы получить ваши данные, вы должны использовать функцию обратного вызова, которую вы уже поместили в getUsers
.Код должен выглядеть следующим образом:
usuariosFactory.getUsers(function () {
scope.usuarios = usuariosFactory.users;
});
и после f.users = response.data.users;
необходимо вызвать функцию обратного вызова.Например:
f.getUsers = function (callback) {
var token = window.localStorage.getItem("_token");
$http.get("http://localhost:8000/api/user/list?token=" + token).then(function (response) {
f.users = response.data.users;
callback();
});
};
Таким образом вы будете обрабатывать асинхронные функции с помощью функции обратного вызова.Еще один способ сделать это с обещаниями, таким образом, ваш код должен выглядеть следующим образом:
Завод
app.factory("usuariosFactory", function ($http, $q) {
var f = {};
f.users = [];
f.getUsers = function (callback) {
var token = window.localStorage.getItem("_token");
var deferred = $q.defer(); // Creates the object that handles the promise
$http.get("http://localhost:8000/api/user/list?token=" + token)
.then(function (response) {
f.users = response.data.users;
deferred.resolve('You can pass data!'); // Informs that the asynchronous operation have finished
});
return deferred.promise; // Returns a promise that something will happen later
};
return f;
});
Контроллер
app.controller("usuariosController", function ($scope, usuariosFactory) {
var scope = this;
// Now you can use your function just like you use $http
// This way, you know that watever should happen in getUsers, will be avaible in the function
usuariosFactory.getUsers()
.then(function (data) {
console.log(data) // Print 'You can pass data!'
scope.usuarios = usuariosFactory.users;
});
});