プロミスオブジェクトを使用して作成されたログインフォームがあります。 forma検証が実行される場合を除いてすべてが正常に動作します。 ここに私のhtmlファイルがあります。私は、フォームを初めて訪問したときに妥当性検査の失敗後にプロミスが解決されない
<form id="signin" class="signinform" autocomplete="off">
<span ng-show="errorName" class="error_block">{{ errorName }}</span>
<input placeholder="User Name" ng-model="user.name" type="text" name="user_name" required>
<input placeholder="Password" ng-model="user.password" type="password" name="password" required>
<input type="submit" ng-click="submit(user)" value="Log IN" id="submit">
</form>
はここでNG-クリックが
$scope.submit = function(user){
LoginService.login(user)
.then(function(response) {
var userInfo = response.userName
$rootScope.$emit('myEvent',userInfo);
$location.path("/details/1");
},
function(error) {
$scope.errorName = "Invalid Username or Password";
});
}
を書かれているコントローラは、ここで
app.factory("LoginService", function($http, $q, $window) {
var userInfo;
var deferred = $q.defer();
function login(user) {
$http({
method: 'POST',
url: "login.php",
data: { "userName": user.name, "password": user.password },
headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'}
}).then(function(result) {
userInfo = {
accessToken: result.data.login.token,
userName: result.data.login.name
};
$window.sessionStorage["userInfo"] = JSON.stringify(userInfo);
deferred.resolve(userInfo);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
}
return {
login: login
};
});
の工場出荷時のサービスは今何が起こるかですされており、有効な結果を持つフォームを送信してください。ログインプロセスは成功し、私は「詳細」にリダイレクトされます。しかし、ユーザー名またはパスワードが間違ってフォームが拒否された場合、エラーが表示されます。
その後、私は正しい資格情報を入力して、私は '詳細'にリダイレクトされず、そのエラーが表示されている同じログインフォームに立ち往生していない場合は表示されます。 しかし、私はページをリフレッシュするとき、私はすでにログインしています。これは、http要求が発生し、userInfoが設定されているためです。
コードをデバッグし、その関数が$ scope.submitで実行されていないことが判明しました。これは、約束が解決されていない可能性があるためです。私はいくつかのscope.applyと他のものを試しましたが、何も働かなかった。 誰でもここで起こっていることを助けることができますか?
はい、それは論理的、高すぎるようです.. – ronit