Мой случай:Как вернуть метод «then()» в angularjs?
app.js
:
let app = angular.module('myApp', []);
app.controller('login', function ($scope, $login) {
$scope.account = {};
$scope.loginForm_submit = function ($event, account) {
$event.preventDefault();
if ($login.isValid(account)) {
$login.submit(account);
// goal:
$login.submit(account).then(function() {
window.location = '/'
}, function (msg) {
console.log(msg)
});
}
};
});
login.js
:
app.factory('$login', function() {
let o = {
isValid: function (x) {
let success = false;
// validating...
return success
},
submit: function (x) {
// prevent to force submitting
if (this.isValid(x)) {
let formData = new FormData(), xhttp = new XMLHttpRequest();
// appending data to 'formData' via 'x'...
xhttp.onreadystatechange = function() {
if (xhttp.readyState === XMLHttpRequest.DONE) {
let data = JSON.parse(xhttp.responseText);
if (data['Success']) {
// return then() with successCallback() function
} else {
let msg = data['ErrorMessage'];
// return then() with errorCallback() function
}
}
}
xhttp.open('POST', '/account/register');
xhttp.send(formData);
}
}
}
return o
});
data
является объектом, как:
let data = {
'Success': false,
'ErrorMessage': 'Invalid login attempt.'
};
Я хочу вернуться then()
метод корму er для представления результата. Как я могу это сделать?
UPDATE:
В контроллере:
[HttpPost]
public async Task<ObjectResult> Login(LoginViewModel model)
{
IDictionary<string, object> value = new Dictionary<string, object>();
value["Success"] = false;
if (ModelState.IsValid)
{
// login
value["Success"] = true;
}
return new ObjectResult(value);
}
use $ q для возврата обещания – simon
Почему вы делаете все это самостоятельно? Угловые предложения '$ http', которые возвращают обещание на его вызовы iirc. – tkausl
вы должны использовать '$ q' – vistajess