2016-05-24 2 views
0

У меня возникает проблема, когда переменная обновляется в моем контроллере, но обновление не отображается в представлении.Угловой вид не обновляется, когда контроллер обновлен

Переменная, которая должна отображаться на переднем конце, это loginErrorMessage, но переменная не появится, если я перейду оттуда, а затем вернусь на эту страницу, несмотря на то, что она обновлена ​​в контроллере.

Ниже контроллер:

function LoginCtrl($rootScope, $state, $scope, UserService, AttributesService){ 
    var vm = this; 
    vm.loginErrorMessage = ''; 
    vm.email = ''; 
    vm.password = ''; 
    vm.doLogin = doLogin; 
    vm.successLoginJoinApiResponse = successLoginJoinApiResponse; 

    function doLogin(){ 
     if(UserService.validateLoginCredentials()){ 
     UserService.loginUser() 
     .success(function(response){ 
      vm.successLoginJoinApiResponse(response, false); 
     }) 
     }else{ 
     vm.loginErrorMessage = 'Incorrect Email or Password'; 
     console.log(vm.loginErrorMessage) 
     //vm.loginErrorMessage is updated at this point 
     } 
    } 

    function successLoginJoinApiResponse(response, join){ 
     // stuff happens here, not where the issue is. 
    } 
    } 

Вот Маршрут:

.state('app.login', { 
    url: '/login', 
    cache: false, 
    views: { 
     'menuContent': { 
     templateUrl: 'templates/login.html', 
     controller:'LoginCtrl as app' 
     } 
    }, 
    }) 

А вот вид:

<ion-view view-title="" class=""> 
    <ion-nav-bar class="white-back"> 
    </ion-nav-bar> 
    <ion-content scroll="false" class="white-back has-header"> 

    // This is where the variable should be displayed 
    <div class="login-error-message" ng-bind="app.loginErrorMessage"> 
    </div> 

    <div class="center-everything mar-top-25"> 
     <form ng-submit="app.doLogin()"> 
     <div class="list pad-20 pad-top-30 pad-bottom-0"> 
      <label class="item item-input input-login"> 
      <input type="email" placeholder="Email" ng-model="app.email"> 
      </label> 
      <label class="item item-input mar-top-15 input-login"> 
      <input type="password" placeholder="Password" ng-model="app.password"> 
      </label> 
     </div> 
     <div class="pad-20 pad-top-0"> 
      <a class="link" ng-click="app.doLogin()"> 
      <button class="button button-block blue-back white" id="button-submit-stuff" type="submit"><b>LOGIN</b></button> 
      </a> 
     </div> 
     </form> 
    </div> 
    </ion-content> 
</ion-view> 

UserService.validateLoginCredentials() возвращает ложь и т.д. сценарий переходит к инструкции else, и где-то там, где он терпит неудачу.

Я попытался запустить $ scope. $ Apply(), но я получаю уже выполненную ошибку $ apply().

Я также заметил, что переменная появится на мгновение, когда я перейду от страницы.

Я также управляю этим через ионный.

Если у кого-нибудь есть совет, я бы очень признателен, спасибо!

ответ

0

Просто догадаться, но в вашей функции doLogin есть метод async UserService.validateLoginCredentials() и возврат обещания? Потому что в этом случае код в блоке else никогда не будет запущен.

+0

Нет, это на самом деле просто, если/другое заявление в службе, Безразлично Не вернем обещания. – RandyMarsh

0

, так что вы сначала проверяете регистрационные данные, а затем пытаетесь войти в систему?

Я предполагаю, что в UserService.loginUser отсутствует часть .error().

function doLogin(){ 
    if(UserService.validateLoginCredentials()){ 
    UserService.loginUser() 
    .success(function(response){ 
     vm.successLoginJoinApiResponse(response, false); 
    }) 
    .error(function(err){ 
     vm.loginErrorMessage = 'Incorrect Email or Password'; 
     console.log(vm.loginErrorMessage) 
     //vm.loginErrorMessage is updated at this point 
    }); 
    } else{ 
    vm.loginErrorMessage = 'Incorrect Email or Password'; 
    console.log(vm.loginErrorMessage) 
    //vm.loginErrorMessage is updated at this point 
    } 
} 

Точно так же вы также знать: сокращенная успех/ошибка осуждается в угловой 1,5 но можно переписать так:

function doLogin(){ 
    if(UserService.validateLoginCredentials()){ 
     UserService.loginUser() 
      .then(function(response){ 
       vm.successLoginJoinApiResponse(response, false); 
      }, 
      function(err){ 
       vm.loginErrorMessage = 'Incorrect Email or Password'; 
       console.log(vm.loginErrorMessage); 
       //vm.loginErrorMessage is updated at this point 
      }); 
    } else{ 
     vm.loginErrorMessage = 'Incorrect Email or Password'; 
     console.log(vm.loginErrorMessage); 
     //vm.loginErrorMessage is updated at this point 
     } 
    } 
+0

Эй, UserService.validateLoginCredentials() фактически возвращает false, поэтому скрипт переходит к инструкции else и там, где он терпит неудачу. Я должен был сделать это ясно в первоначальном вопросе – RandyMarsh

Смежные вопросы