Angular JS: как связать с обещаниями
Я пытаюсь связать обещание с представлением. Я нене знаю, можете ли вы сделать это напрямую, но эточто яЯ пытаюсь сделать. Есть идеи, что я делаю не так?
Примечание: источник немного надуман и использует статические данные, но этоs, чтобы сделать код проще для диагностики.
РЕДАКТИРОВАТЬ: JSFiddle Page:http://jsfiddle.net/YQwaf/27/
РЕДАКТИРОВАТЬ: РЕШЕНИЕ: Оказалось тыМожно напрямую связывать обещания. У меня было две проблемы с моим исходным кодом:
Использование setTimeout () вместо угловыхТайм-аут $ был проблемой. Угловой неНе знаю, нужно ли обновлять пользовательский интерфейс при срабатывании тайм-аута (это можно решить с помощью $ scope. $ apply внутри setTimeout или вы можете просто использовать $ timeout)Привязка к функции, возвращающей обещание, была проблемой. Если его вызывают второй раз, он дает еще одно обещание. Лучше установить переменную области действия для обещания и создавать новое обещание только по мере необходимости. (В моем случае это был вызов $ scope. $ Watch в коде страны)HTML:
Region Code
Country CodeUnited StatesCanada
JS:
function addressValidationController($scope, $q) {
var regions = {
US: [{code: 'WI',name: 'Wisconsin'}, {code: 'MN',name: 'Minnesota'}],
CA: [{code: 'ON',name: 'Ontario'}]
};
$scope.getRegions = function () {
var deferred = $q.defer();
setTimeout(function () {
var countryRegions = regions[$scope.countryCode];
console.log(countryRegions);
if(countryRegions === undefined) {
deferred.resolve([]);
} else {
deferred.resolve(countryRegions);
}
}, 1000);
return deferred.promise;
};
}