Я пытаюсь использовать угловое обещание, используя $ q, который завернут в «службу» и вызовет его из моего контроллера. Вот код:Как реализовать вызов ajax, используя обещание с угловым?
var myController = function ($scope, myService) {
$scope.doSomething = function (c, $event) {
$event.preventDefault();
myService.method1(c).then(function (rslt) {
alert(rslt);
}, function (err) {
alert(err);
}).then(function() {
//clean up
});
};
};
var myApp = angular.module('myApp', [])
.factory('myService', function($q) {
function _method1(c) {
var dfr = $q.defer();
var dt = { sc: c };
$.ajax({
type: "POST",
url: "mypage.aspx/mymethod",
data: JSON.stringify(dt),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() {
dfr.resolve('actions sucess');
},
error: function (msg) {
dfr.reject(msg);
}
});
return dfr.promise;
}
return { method1: _method1 };
}).controller('myController', myController);
Проблема заключается в том, что 'тревога (Rslt);' кусок кода никогда не выполняется. Служба вызывается и данные обновляются, но первая функция «тогда» не достигается при первом нажатии.
Что я делаю неправильно? Любая помощь приветствуется.
Я не понимаю, почему запуск цикла дайджеста решает этот пример. Когда вы разрешаете() 'обещание (возврат' method1 (c) ', то же ссылка), функция' then() 'должна запускать даже ** без **' $ apply'. Единственное, что я нашел в документах, это: «$ q интегрирован с механизмом наблюдения n-ой модели $ rootScope.Scope ... что означает более быстрое распространение ...». – angabriel
Интеграция углового '$ q' с угловым означает, что он * требует * цикла дайджеста для инициирования изменений. –
Интересно, это ново для меня. У вас есть ссылка на этот кусок документа? – angabriel