我在前面使用angular.js。
在我的controller.js中我定义了一个将在
中调用的init()方法我的控制器的初始化。
Init方法定义:
var init = function () {
$scope.callTeamsService();
if ($scope.teams.length == 0){
....
}else{
...
}
.....
};
$ scope.callTeamsService 中的我填写 $ scope.teams 变量。
$ scope.callTeamsService 方法定义:
$scope.callTeamsService = function(){
NavService.getTeams(function (response) {
$timeout(function () {
$scope.teams = response;
}
}, 200);
});
};
在我的service.js中,我定义了一个 getTeams 方法,如下所示:
service.getEquipes = function (callback) {
$http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams')
.success(function (response) {
callback(response);
});
};
我的问题是当 $ scope.teams.length == 0 条件达到时
我的service.js中的service.getEquipes 方法尚未调用。
如何在达到 $ scope.teams.length == 0 条件之前修改此代码以完成 $ scope.callTeamsService 方法的执行。
答案 0 :(得分:2)
service/factory
service.getEquipes = function () {
return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');
};
// controller
var promise = NavService.getTeams.then (
function(data) {
//assign to $scope or do logic
},
function(err){
console.log(err)
}
)
答案 1 :(得分:2)
如何修改此代码,以便在达到
$scope.callTeamsService
条件之前完成$scope.teams.length == 0
方法的执行。
错误的方法 - 你需要等待执行$scope.teams.length == 0
条件,直到$scope.callTeamsService
方法完成。
经典方法是给$scope.callTeamsService
方法一个回调参数,并在超时而不是$scope.teams = response;
中调用它。然后,您可以将条件放在您传递的回调中的init
函数中。
但是,你似乎想要使用promises。为此,所有函数(都是异步的)应return
承诺:
service.getEquipes = function (callback) {
return $http.get(urlBase+'users/' + $rootScope.globals.currentUser.loggedUser.idUser + '/teams');
}
(很简单,$http
已经返回承诺)
$scope.callTeamsService = function() {
return NavService.getTeams().then(function(teams) {
return $timeout(function() {
return teams;
}, 200);
});
};
(和$timeout
也可以这样做 - 通过调用then
并从回调中返回它,你可以链接它们并获得两者的新承诺。
function init() {
return $scope.callTeamsService().then(function(teams) {
$scope.teams = teams;
if (teams.length == 0) {
…
} else {
…
}
});
}