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

AngularJS嵌套ng-repeat绑定唯一产品价格问题求助

解决AngularJS嵌套ng-repeat中价格列表被覆盖的问题

你遇到的问题很典型——因为你把所有游戏的价格都存在全局的$scope.AllPrices里,每次新的请求都会覆盖这个变量,最后所有游戏的价格区域都会显示最后一次请求回来的数据。要解决这个问题,核心思路是把每个游戏的价格和游戏对象本身绑定在一起,而不是用全局变量共享数据。

具体修改步骤

1. 调整控制器的价格请求方法

修改getPriceByGame函数,不再将返回的价格数据赋值给全局的$scope.AllPrices,而是直接挂载到当前请求的游戏对象上:

$scope.getPriceByGame = function (game) {
  // 避免重复请求(如果已经加载过价格就跳过)
  if (game.prices?.length) return;

  var request = 'AllPrices/' + game.id_product;
  $http({ method: 'Get', url: uri + request })
    .success(function (data) {
      // 将价格列表绑定到当前game的prices属性
      game.prices = data;
    })
    .error(function() {
      // 错误处理:初始化空数组避免报错
      game.prices = [];
    });
};

2. 更新HTML模板的绑定逻辑

在ng-init中传入完整的game对象,然后嵌套的ng-repeat直接遍历当前游戏的prices属性,而不是全局的AllPrices:

<div ng-repeat="game in AllGames">
  <div>{{game.title}} | {{game.id_product}}</div>
  <div ng-init="getPriceByGame(game)">
    <!-- 遍历当前游戏专属的prices数组 -->
    <div ng-repeat="priceItem in game.prices"> {{priceItem.price}} </div>
  </div>
</div>

3. 可选优化:提前初始化价格数组

为了避免第一次加载时game.prices为undefined导致的潜在问题,可以在获取游戏列表时,给每个游戏预先初始化空的价格数组:

$scope.getAllGames = function () {
  var request = 'Games';
  $http({ method: 'Get', url: uri + request })
    .success(function (data) {
      $scope.AllGames = data;
      // 给每个游戏初始化prices空数组
      $scope.AllGames.forEach(game => {
        game.prices = [];
      });
    })
};

为什么这样能解决问题?

每个游戏对象现在都有自己独立的prices数组,不同游戏的价格请求会把数据存到各自的game实例中,不会互相覆盖。这样嵌套的ng-repeat就能准确渲染对应游戏的价格列表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:12:20