javascript - AngularJS 使用 ajax 调用将 ng-repeat 加载到另一个 ng-repeat

标签 javascript angularjs ajax http angularjs-ng-repeat

我是 Angular 的新手,希望得到一些帮助来解决以下问题。这是我目前拥有的代码,只需使用 post 请求从服务器获取一组结果并使用 ng-repeat 指令显示它们:

<div id="mainW" ng-controller="MediaController">

    <div id="mediaBodyW" ng-repeat="media in medias">
        <div class="mediaW" data-id="{{media.id}}">
        <div class="mediaNum">{{media.num}}</div>
        <div class="mediaN">{{media.name}}</div>

        <div id="loadSubs" ng-click="loadSubMedias(media.id)">load sub medias</div>
        <div id="subMediaW"></div>

    </div>
</div>

这是我的 Controller :

app.controller("MediaController",['$scope','$http','$httpParamSerializerJQLike',function($scope,$http,$httpParamSerializerJQLike){

    $scope.medias = [];

    try {
        $http({
            method: 'POST',
            url: 'media.php',
            data: $httpParamSerializerJQLike({"request":"getAllMedia"}),
            headers: {'Content-Type':'application/x-www-form-urlencoded'}
        }).then(function (ans) {
            $scope.medias = ans.data;
        }, function (error) {
            console.error(JSON.stringify(error));
        });
    }
    catch (ex) {
        console.error("Error: " + ex.toString());
    }
}]);

现在,我想要实现的是:单击 ID 为“loadSubs”的 div,运行另一个 $http post 查询,它将结果数组加载到“subMediaW”中。当然,对于每个媒体元素,html 的查询和附加应该是唯一的,并且每次为特定元素加载数据时,所有以前的结果都应该被清除,同时考虑到加载的数据也会在未来。

有人可以帮助我了解如何使用 AngularJS 执行此操作吗?

最佳答案

试试这个,

$scope.prevMedia = null; //use this to store last clicked media object

$scope.loadSubMedias = function(media){
  $http.post().... //make api call for subMedia here
  .then(function(res){
      media.subMediaW = res.data // attach a subMediaW array to the media object
      media.showSubMedia = true; // set variable true to make submedia visible for current media object, this will be used with ng-if attribute in html
      if($scope.prevMedia != null) $scope.prevMedia.showSubMedia = false; // if last selected media object is not null, hide its submedia
   })
}

和html

<div id="mainW" ng-controller="MediaController">

  <div id="mediaBodyW" ng-repeat="media in medias">
    <div class="mediaW" data-id="{{media.id}}">
    <div class="mediaNum">{{media.num}}</div>
    <div class="mediaN">{{media.name}}</div>

    <div id="loadSubs" ng-click="loadSubMedias(media)">load sub medias</div>
    <div id="subMediaW" ng-repeat="submedia in media.subMediaW" ng-if="media.showSubMedia"></div>

  </div>
</div>

关于javascript - AngularJS 使用 ajax 调用将 ng-repeat 加载到另一个 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136470/

相关文章:

javascript - 具有多个startsWith和endsWith参数的过滤数组

javascript - 如何将对象作为参数传递?

javascript - jQuery 动画圆形进度条

javascript - 在 AngularJS 表中使用 href 来循环唯一 ID

javascript - Angular - 在 ng-click 上从 Controller 运行函数

javascript - 如何在最后以及发布/触发/继续提交之后暂停表单提交,进行最后一次验证?

Javascript - 编辑类而不是 ID 不起作用/编辑类的高度

javascript - 带 Angular Highcharts ,删除 xAxis 线

javascript - ParseJSON 对我的 json 数据进行排序

php - 为什么我通过 jquery ajax 和 codeigniter 得到验证错误?