Переменная области видимости контроллера не загружается до обновления

0

У меня есть контроллер входа

myApp.controller('LoginCtrl', ['$scope', '$http','$location', function($scope, $http, $location) {
    $scope.login = function() {
        var data = JSON.stringify({user: $scope.user.id, password: $scope.user.password, type: "m.login.password"});
        $http.post("http://localhost:8008/_matrix/client/api/v1/login", data).then(function mySuccess(details){
            $http.post('/login',details.data).success(function(response){
                console.log(response);
            });
            $location.path('home');
        }, function myError(err) {
            console.log(err);
            alert("Invalid username/password")
        });
    };
}]);

и домашний контроллер

myApp.controller('HomeCtrl', ['$scope', '$http','$location', function($scope, $http, $location) {
    console.log("Hello World from home controller");

    var refresh = function() {
        $http.get('/roomNames').success(function(response) {
            console.log("I got the data I requested");
            $scope.roomNames = response;
        });
    }
    refresh();
}]);

Как видно, если данные для входа верны, LoginCtrl изменяет маршрут на home.html.

Однако, когда я запускаю приложение и логин успешно, HomeCtrl должен сделать запрос получения на сервер для данных для зарегистрированного пользователя.

Я хочу, чтобы эти данные загружались как список в home.html. Здесь мой home.html

<h3 class="subHeader"> Rooms </h3>
      <ul class="nav nav-sidebar">
        <!-- <li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li> -->
        <li ng-repeat="room in roomNames"><a>{{room}}</a></li>

      </ul>

Однако при успешном входе в систему переменная roomNames сначала пуста. Как только я обновляю страницу, список html заполняется.

Как обеспечить, чтобы список был заполнен, как только откроется страница home.html?

  • 0
    Не уверен, но измените $ scope.roomNames = response; в $ scope. $ apply (function () {$ scope.roomNames = response;})
  • 0
    попробуйте вернуть $ http.get
Показать ещё 2 комментария

2 ответа

0

Это связано с тем, что вы переходите на домашнюю страницу до доступа к вашему серверу. Поэтому на домашней странице вы не получите данные и получите их после обновления.

Переадресовываться на страницу только после успешной проверки подлинности.

myApp.controller('LoginCtrl', ['$scope', '$http','$location', function($scope, $http, $location) {
$scope.login = function() {
    var data = JSON.stringify({user: $scope.user.id, password: $scope.user.password, type: "m.login.password"});
    $http.post("http://localhost:8008/_matrix/client/api/v1/login", data).then(function mySuccess(details){
        $http.post('/login',details.data).success(function(response){
            console.log(response);
            $location.path('home'); // Redirect after success login
        })
         .catch(function(data){
           console.error("Error in login",data);
         });

    }, function myError(err) {
        console.log(err);
        alert("Invalid username/password")
    });
};
}]);
  • 0
    не работает .. путь не меняется вообще
  • 0
    Что именно не работает? Показать данные в переменной roomNames .
Показать ещё 2 комментария
0

попробуйте использовать успешные и errorcallbacks от $ http, было бы лучше разместить эту функциональность на фабрике

myApp.controller('HomeCtrl', ['$scope', '$http', '$location',
  function($scope, $http, $location) {
    console.log("Hello World from home controller");

    var refresh = function() {
      $http.get('/roomNames')
        .then(function successCallback(response) {
          $scope.roomNames = response;
        }, function errorCallback(response) {
          //output an error if failed?
        });
    }
    refresh();
  }
]);
  • 0
    Это все еще не работает .. Я думаю, что использование сервиса может быть моим лучшим выбором!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню