You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过按钮点击初始化AngularJS Factory?

如何初始化你的AngularJS iScroll Factory并修复潜在问题

嘿,我先帮你把Factory里的几个小问题修正了,再一步步实现按钮点击初始化的功能——毕竟原有代码里的异步逻辑和this指向问题会导致数据加载失败或者重复请求哦!

第一步:修复Factory的核心问题

原来的代码里,$http回调里的this并不指向iScroll实例,而且还没等请求完成就重置了busy状态,这会引发不少bug。先把Factory调整一下:

.factory('iScroll', function($http) { 
  var iScroll = function(pre_url){ 
    this.items = []; 
    this.busy = false; 
    this.page = 1; 
    this.pre_url = pre_url; 
  } 
  iScroll.prototype.nextPage = function(){ 
    if(this.busy) return; 
    this.busy = true; 
    var url = this.pre_url + 'page='+this.page; 
    // 保存实例的this引用,避免回调里上下文丢失
    var self = this;
    $http.get(url).then(function(response){ 
      console.log(response.data); 
      for (var i = 0; i < response.data.length; i++){ 
        self.items.push(response.data[i]); 
        console.log("l..."); 
      } 
      // 只有请求成功完成后,才更新页码并解锁忙碌状态
      self.page++; 
      self.busy = false; 
    }).catch(function(error) {
      // 处理请求错误,同时重置忙碌状态,避免按钮永久禁用
      console.error('加载数据失败:', error);
      self.busy = false;
    }); 
  } 
  return iScroll; 
})

第二步:实现按钮点击初始化

接下来在控制器里注入Factory,创建实例,再绑定按钮的点击事件来触发首次数据加载:

控制器代码

.controller('MainController', function($scope, iScroll) {
  // 初始化iScroll实例,替换成你的API前缀地址
  $scope.scrollLoader = new iScroll('https://your-api-domain.com/api/data?');
  
  // 按钮点击触发的初始化函数(本质就是调用nextPage加载第一页)
  $scope.initScrollData = function() {
    $scope.scrollLoader.nextPage();
  };
})

视图(HTML)代码

在模板里添加按钮和数据展示区域:

<div ng-controller="MainController">
  <!-- 忙碌状态下禁用按钮,防止重复点击 -->
  <button ng-click="initScrollData()" ng-disabled="scrollLoader.busy">
    {{scrollLoader.busy ? '加载中...' : '初始化加载数据'}}
  </button>
  
  <!-- 展示加载出来的列表数据 -->
  <ul ng-if="scrollLoader.items.length > 0">
    <li ng-repeat="item in scrollLoader.items track by $index">
      {{item.title || item}}
    </li>
  </ul>
  <p ng-if="!scrollLoader.busy && scrollLoader.items.length === 0">暂无数据</p>
</div>

这样点击按钮就能初始化iScroll实例并加载第一页数据啦,而且还处理了错误状态和重复点击的问题~

内容的提问来源于stack exchange,提问作者EMRADE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:30