在角控制器中,如何在初始化另一个属性之前先初始化多个异步属性
In angular controller, how can I get multiple async properties to initialize before initializing another property
在我的Angular控制器中,我有4个属性,所有属性都涉及到对我的工厂的调用,这些调用使用angulars$q返回promise。
我对异步和承诺的世界相当陌生,所以这可能是一个需要解决的简单问题,但这是我面临的问题。
我想等到前两个异步调用返回后再执行第三个,然后必须在执行最后一个之前返回。我已经有了这个我正在创建的演示应用程序,它以前很好地与pub/sub合作来协调这一点,但我决定转换到Angular来了解更多关于它如何工作的信息。
这是我的控制器代码。基本上,锦标赛名称、锦标赛钱包需要在我设置锦标赛结果之前设置好(因为它需要知道钱包),然后在设置好所有这些之后,我需要设置选秀权(它使用结果在高尔夫池风格的应用程序中为球员的选秀权打分)。
demoApp.controller('SimpleController', function ($scope, simpleFactory) {
$scope.tournamentName = '';
$scope.tournamentPurse = '';
$scope.tournamentResults = [];
$scope.picks = [];
init();
function init() {
$scope.tournamentName = simpleFactory.getTournamentName();
$scope.tournamentPurse = simpleFactory.getTournamentPurse();
$scope.tournamentResults = simpleFactory.getTournamentResults();
$scope.picks = simpleFactory.getPicks();
}
});
这里是我的一个工厂方法getTournamentName的代码,它使用YQL来获取名称。
factory.getTournamentName = function() {
var deferred = $q.defer();
var query = "SELECT * FROM html WHERE url='http://espn.go.com/golf/leaderboard' AND xpath='"//h1[@class='tourney-name']'"";
var encodedQuery = encodeURIComponent(query.toLowerCase()),
url = 'http://query.yahooapis.com/v1/public/yql?q=' + encodedQuery + '&format=json&callback=JSON_CALLBACK';
$http({method: 'JSONP', url: url}).
success(function(data) {
var tournamentName = data.query.results.h1.content;
deferred.resolve(tournamentName);
});
return deferred.promise;
};
将$q服务注入控制器,代码将类似于以下
$q.all([simpleFactory.getTournamentName(), simpleFactory.getTournamentPurse()]) //Wait for both operations to complete
.then(function (results) {
$scope.tournamentName = results[0];
$scope.tournamentPurse = results[1];
return simpleFactory.getTournamentResults();
})
.then(function (results) {
$scope.tournamentResults = results;
$scope.picks = simpleFactory.getPicks(); //this assignment can be done in next then, if we return promise
});
相关文章:
- ng重复中的ng模型-初始化唯一作用域属性
- 每次属性更改时,角度控制器都会初始化
- 为什么我总是得到属性或字段尚未初始化
- 在初始化Javascript时执行的私有函数中设置公共属性
- 新Javascript对象的可选初始化属性
- 在object.defineProperty之前在对象初始化中设置属性
- 想要初始化“;min”;输入类型的属性=“;日期“;在HTML5中,具有特定日期格式的日期值
- 初始化可从元素属性值观察到的Knockout
- 在使用函数作为构造函数时,我在初始化属性时卡住了这个运算符.我的代码如下
- Javascript 对象属性初始化
- Javascript:按属性初始化对象
- 使用同一对象的其他属性初始化对象属性
- 从数据属性初始化JQuery插件
- 使用HTML5 data-*属性初始化Javascript Select2控制器
- 当用函数作为属性初始化对象时,参数是变量的名称,而不是其值
- 用对象自己的属性初始化对象属性
- 未启用ES7属性初始化器的柯里函数
- Javascript 属性初始化不正确
- Javascript中用于属性初始化的简短if语句
- 属性初始化