私の場合:angularjsの "then()"メソッドを返す方法は?
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
:
let data = {
'Success': false,
'ErrorMessage': 'Invalid login attempt.'
};
私はthen()
メソッドの後方を返したい:
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
は、オブジェクトのようなものですその結果にアクセスするために提出する。どうやってやるの?
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);
}
約束を返すために$ qを使用 – simon
なぜこのすべてのajaxを自分でやっていますか?角は、その呼び出しに約束を返す '$ http'を提供します。 – tkausl
あなたは '$ q'を使用するべきです – vistajess