在 AngularJS 和 Ionic 上呈现列表之前等待异步数据
Wait for async data before rendering a list on AngularJS and Ionic
我是 Angular JS 的新手,但在使用 Javascript 方面有很好的经验。
在我的应用程序中,我正在创建一个简单的工厂,由来自 Web 服务的 JSON 数据实现:
.factory('Tools', function($http) {
var tools = {content:null};
var promise = $http.get('/Tool/GetTools').success(function(data) {
tools.content = data;
//At this points all the data is on tools.content
});
return {
promise:promise,
all: function(){
return tools;
//At this point tools equals to null
}
}
});
但是当我想渲染列表时:
<ion-list>
<ion-item ng-repeat="tool in tools">
Hello, {{tool}}!
</ion-item>
</ion-list>
信息还没有。
我的控制器上有这个:
.controller('AccountCtrl', function($scope, Tools) {
$scope.tools = Tools.all();
});
有没有办法在列表呈现之前从 ajax 调用加载工具对象时告诉列表 "wait"?
谢谢!
你必须说{{tool}}
错别字 :-)
<ion-list>
<ion-item ng-repeat="tool in tools">
Hello, {{tool}}!
</ion-item>
</ion-list>
你必须 return 从你的工厂承诺并进入控制器你可以检查是否成功。
是这样的:
(我模拟了超时等待)
angular.module('App', [])
.controller('Ctrl', function($scope, resultsFactory) {
$scope.results = [{txt: 'Loading..'}];
resultsFactory.all().then(
function(res){
$scope.results = res;
},
function(err){
console.error(err);
}
);
})
.factory('resultsFactory', function($http, $timeout, $q) {
var results = {};
function _all(){
var d = $q.defer();
$timeout(function(){
d.resolve([{txt:'one'},{txt:'two'},{txt:'three'}]);
}, 2000);
return d.promise;
}
results.all = _all;
return results;
});
<!DOCTYPE html>
<html ng-app='App'>
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.20/angular.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div ng-controller='Ctrl'>
<p ng-repeat='res in results'> {{res.txt}}</p>
</div>
</body>
</html>
我是 Angular JS 的新手,但在使用 Javascript 方面有很好的经验。
在我的应用程序中,我正在创建一个简单的工厂,由来自 Web 服务的 JSON 数据实现:
.factory('Tools', function($http) {
var tools = {content:null};
var promise = $http.get('/Tool/GetTools').success(function(data) {
tools.content = data;
//At this points all the data is on tools.content
});
return {
promise:promise,
all: function(){
return tools;
//At this point tools equals to null
}
}
});
但是当我想渲染列表时:
<ion-list>
<ion-item ng-repeat="tool in tools">
Hello, {{tool}}!
</ion-item>
</ion-list>
信息还没有。
我的控制器上有这个:
.controller('AccountCtrl', function($scope, Tools) {
$scope.tools = Tools.all();
});
有没有办法在列表呈现之前从 ajax 调用加载工具对象时告诉列表 "wait"?
谢谢!
你必须说{{tool}}
错别字 :-)
<ion-list>
<ion-item ng-repeat="tool in tools">
Hello, {{tool}}!
</ion-item>
</ion-list>
你必须 return 从你的工厂承诺并进入控制器你可以检查是否成功。 是这样的: (我模拟了超时等待)
angular.module('App', [])
.controller('Ctrl', function($scope, resultsFactory) {
$scope.results = [{txt: 'Loading..'}];
resultsFactory.all().then(
function(res){
$scope.results = res;
},
function(err){
console.error(err);
}
);
})
.factory('resultsFactory', function($http, $timeout, $q) {
var results = {};
function _all(){
var d = $q.defer();
$timeout(function(){
d.resolve([{txt:'one'},{txt:'two'},{txt:'three'}]);
}, 2000);
return d.promise;
}
results.all = _all;
return results;
});
<!DOCTYPE html>
<html ng-app='App'>
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.20/angular.min.js"></script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div ng-controller='Ctrl'>
<p ng-repeat='res in results'> {{res.txt}}</p>
</div>
</body>
</html>