加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 17:20:43 所属栏目:安全 来源:网络整理
导读:我是Angular JS的新手,但在使用 Javascript方面有很好的经验. 在我的应用程序中,我正在创建一个由来自Web服务的JSON数据实现的简单工厂: .factory('Tools',function($http) { var tools = {content:null}; var promise = $http.get('/Tool/GetTools').succe
我是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调用加载Tools对象时告诉列表“等待”?

谢谢!

解决方法

您必须从工厂返回承诺并进入控制器,您可以检查成功.
像这样的东西:
(我已经模拟了超时的等待)

angular.module('App',[])

.controller('Ctrl',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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读