控制器范围变量在刷新之前不加载

时间:2016-03-26 09:19:10

标签: javascript html angularjs

我有一个登录控制器

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应该向服务器发出get请求,以获取登录用户的数据。

我想要的是将这些数据作为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页面打开后立即填写列表?

2 个答案:

答案 0 :(得分:0)

尝试使用$ 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();
  }
]);

答案 1 :(得分:0)

这是因为您在访问服务器之前转到主页。因此,在主页上,您将无法获取数据,并在刷新后获取数据。

只有在成功验证后才会重定向到页面。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "hogwart.harrypotter.bucketdrop"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
}