我有一个登录控制器
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页面打开后立即填写列表?
答案 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'
}