2016-03-26 66 views
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中的列表加載。這是我的家.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.roomNames響應; }) –

+0

嘗試返回$ http.get – user2950720

+0

當頁面加載第一次沒有叫這個功能呢? –

回答

0

嘗試使用從$ HTTP成功和errorcallbacks,倒不如將此功能放到一個工廠

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

這仍然行不通..我認爲使用服務可能是我最好的選擇! – pd176

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

不工作..路徑根本不會改變 – pd176

+0

什麼不起作用?在'roomNames'變量中顯示數據。 –

+0

當我點擊登錄按鈕時,路徑應該改變爲home.html,但這並沒有發生。我卡在login.html頁面 – pd176