2017-06-04 79 views
0

我是新承諾的概念,我在嘗試提交登錄表單時遇到問題。Angular Promise不會運行摘要

當承諾解決時,我想通過更改範圍變量的值來更新ui。

這裏是被稱爲

$ctrl.loginForm = function(isValid) { 
    // check to make sure the form is completely valid 

    if (isValid) { 
     LoginService.login($ctrl.user).then(function (value) { 
      $ctrl.loginError = false; 
      var cookie = value.token; 
     }, function (reason) { 
      $ctrl.loginError = true; 

     }); 
    } 

    }; 

控制方法,這裏是我的服務方法

service.login = function(credentials) { 
    return new Promise((resolve, reject) => { 
     $http.post(AppConst.Settings.apiUrl + 'api-token-auth/',credentials).success((data) => { 
     resolve(data); 
     }).error((err, status) => { 
     reject(err, status); 
     }); 
    }); 
    }; 

所以一旦承諾在控制器改變解決了$ ctrl.loginError它的價值,但它不會在UI上更新。

我試過使用$ apply,它可以工作,但我不明白爲什麼我必須使用$ apply!我認爲摘要循環默認開始!

我做錯了什麼?

+0

無需解決此類服務中的承諾。你可以直接返回你的http呼叫 –

+0

$ http服務返回一個承諾,處理後觸發一個摘要。不需要將其包裝在本機承諾上。你應該接受@Denis Reshetniak的答案。 – Jaime

回答

0

$http方法返回給你一個$ q服務的承諾。所以,問題在於你使用不告訴角度範圍運行$ apply方法的native promise wrapper。 將您的服務更改爲以下

service.login = function(credentials) { 
    return $http.post(AppConst.Settings.apiUrl + 'api-token-auth/',credentials); 
};