AngularJS通过ajax调用将ng-repeat加载到另一个ng-repeat中
AngularJS load ng-repeat into another ng-repeat with ajax call
我是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>
这是我的控制器
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>
首先,你应该有一个函数在你的控制器与名称loadSubMedias,而不是简单地采取媒体。你可以将整个媒体对象发送给它(稍后我们会将新数据作为另一个属性添加到该对象中)。
$scope.loadSubMedias = function (media) {
$http({
method: 'POST',
url: 'media.php',
data: $httpParamSerializerJQLike({"mediaId":media.id}),
headers: {'Content-Type':'application/x-www-form-urlencoded'}
}).then(function (response) {
// now add subDatas into main data Object
media.subMedias = response.data;
});
}
然后在控制器中像这样使用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)">load sub medias</div>
<div id="subMediaW" ng-repeat="subMedia in media.subMedias">
<pre>{{subMedia | json}}</pre>
</div>
</div>
</div>
相关文章:
- 避免在用ng href加载样式表之前显示内容
- 通过使用ng if更新ng repeat加载程序
- 验证嵌套在ng中的输入元素repeat也用于页面加载,而不仅仅用于更改
- 在ng视图加载或指令加载后运行javascript
- ng-repeat中的加载指令(动态模板URL)
- 带有 ng-repeat、ng-show “show more” 和延迟加载的角度指令
- 如何将 json 文件加载到 Angularjs 中进行 ng-repeat
- 使用Angular ng-repeat将数据动态加载到materializecss滑块中不起作用
- Angularjs ng-repeat中的Angleularjs按钮加载状态指令
- AngularJS ng-repeat不会在页面加载时呈现
- ng-controller加载后DOM准备好没有被Angular拾取
- 在页面加载时,根据 json 对象的值向 Angularjs ng-repeat 中的元素添加一个类
- 当应用ng模型过滤器时,ng在加载时重复清空
- 使用ng repeat重新加载时,不会设置选择项的内容
- Angular ng-view -加载失败
- AngularJS简单的ng-repeat预加载器
- AngularJS通过ajax调用将ng-repeat加载到另一个ng-repeat中
- Form ng-submit加载一个子视图,但只加载一次
- Ng-option加载json列表失败
- AngularJS ng-repeat加载状态