在AngularJS和Ionic上呈现列表之前,请等待异步数据

在AngularJS和Ionic上呈现列表之前,请等待异步数据,angularjs,ionic,Angularjs,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;

我是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>
在列表呈现之前,当工具对象从ajax调用加载时,是否有方法告诉列表“等待”


谢谢

你必须说{{tool}

它的打字错误:-)


你好,{{tool}}!

您必须从工厂返回承诺,然后进入控制器,检查是否成功。 大概是这样的: (我模拟了超时等待)

angular.module('App',[])
.controller('Ctrl',函数($scope,resultsFactory){
$scope.results=[{txt:'Loading..'}];
resultsFactory.all()。然后(
功能(res){
$scope.results=res;
},
功能(err){
控制台错误(err);
}
);
})
.factory('resultsFactory',函数($http,$timeout,$q){
var结果={};
函数_all(){
var d=$q.defer();
$timeout(函数(){
d、 解析([{txt:'one'},{txt:'two'},{txt:'three'}]);
}, 2000); 
回报承诺;
}
results.all=\u all;
返回结果;
});

JS-Bin

{{res.txt}


对不起,我忘了更改。无论如何,我期待23个结果,所以如果是问题,它会打印Hello 23次,对吗?它只打印了1个项目。别担心,它已经在等待它了。创建一个控制器,在此创建一个可变的$scope.tools=tools.all();目前,tools没有什么可填充的,但当tools.all()返回一些数据时,它会自动将其与称为双向绑定的视图绑定,您无需担心。对不起,英语不好。谢谢。我的控制器上有这个(我刚刚在我的问题中添加了那个狙击手)。还是不走运。我可以访问视图中的“tools”,但在列表呈现时它是空的,并且它似乎不是我的列表和我的tools变量之间的绑定。工厂中的更改:-.factory('tools',function($http){var tools=null;var promise=$http.get('/Tool/GetTools')。success(function(data){tools=data;//此时所有数据都位于tools.content});返回{promise:promise,all:function(){return tools;//此时tools等于null}});这对我不起作用,但我使用的是Angular版本1.3.20,关于这个特定版本的相同问题,有什么线索吗?请不要浪费时间问我为什么要使用这个版本,这有项目管理方面的原因,现在不可能更改版本。@Amy Pellegrini:我已经更新了片段的Angular版本a和以前一样,你的错误可能在别的地方
.controller('AccountCtrl', function($scope, Tools) {
  $scope.tools = Tools.all();
});
<ion-list>
      <ion-item ng-repeat="tool in tools">
        Hello, {{tool}}!
      </ion-item>
    </ion-list>