调用angularjs内的函数ng重复
Calling function inside angularjs ng-repeat
我是angularjs的新手,正在创建一个phonegap项目。在我的项目中,我使用WPJSON API User Plus插件以JSON格式获取数据,API给出的响应内容很少,我还需要调用另一个API,参数从以前的API获取。是否可以在ng-erepeat中调用API来加载不同的数据。
我正在获取json中的数据,并以ng repeat加载数据,我试过这样的
<tr ng-repeat="app in multipleApps" ng-init="getActivationDate(app)">
<td><h4> {{ app.Name }} </h4></td>
<td> <img src="{{ app.ava_img }}"/> </td>
</tr>
调用以下函数
$scope.getActivationDate = function(app) {
Service.getActivationDate(app.name)
.then(function(response) {
var date = response.data.image;
$scope.app.ava_img = date;
},
// ...
};
我得到的输出是显示所有"app.avaimg"的相同图像,但来自服务的响应不同。请就这个问题提出建议,但我不知道如何将其与ng重复使用。
感谢
首先,我鼓励您阅读ng repeat的文档。我假设app
是一个对象,multipleApps
是一个包含这些对象的数组。
$scope.app.ava_img = data;
表示您正在将$scope上的应用程序变量的ava_img属性设置为您所拥有的数据。因此,将一组对象分配给multipleApps。
例如:$scope.multipleApps = [ {name:'a', ava_img:'a.jpg' }, {name: 'b', ava_img: 'b.jpg' } ]
使用
<tr ng-repeat="app in multipleApps" ng-controller="ItemController">
<td><h4> {{ app.Name }} </h4></td>
<td> <img src="{{ app.ava_img }}"/> </td>
</tr>
并在您的应用程序中定义一个新的控制器:
angular.module("yourapp").controller("ItemController", function($scope, Service){
Service.getActivationDate($scope.app.name).then(function(response) {
var date = response.data.image;
$scope.app.ava_img = date;
}
});
然后,ng repeat的每个迭代都将有自己的ItemController实例,该实例具有不同的$scope。
我不完全清楚你想要实现什么,但我明白了要点。
ng初始化
首先,我会避免使用ng-init
来调用函数。ng-init
通常是我用来初始化对象上的一些琐碎值的东西,这些值在某种程度上有助于UI。文件甚至暗示了这一点——https://docs.angularjs.org/api/ng/directive/ngInit
将逻辑连接在一起的常用方法-承诺
作为一个刚接触Angular的人,你可能遇到过承诺。任何时候你在做这样的事情:
someService.getSomething()
.then( function( rsp ){ ... })
.catch( function( err ){...})
您正在使用promise API。正如我之前所说,我对你的申请并不完全清楚,所以我会在做一些假设。
我假设multipleApps
是API调用的结果,还是您从本地列表中获取的结果?让我们使用API调用。
appService.getApps()
.then( function( rsp ){
return $scope.multipleApps = rsp.data.data //you structure may differ
})
因此,您正在then
处理程序中处理rsp
。我们所需要做的就是把另一系列承诺串在一起。我们可以迭代multipleApps
中的每个app
,然后为响应上的对象分配适当的值,但angular为我们提供了更好的方法。让我们使用$q
。$q
为我们提供了.all
API。此处的文档-https://docs.angularjs.org/api/ng/service/$q#所有
以下是我的使用方法:
appService.getApps()
.then( function( rsp ){
var multipleApps = rsp.data.data
var rqsts = []
for( var app, i = 0; i < multipleApps.length; i++ )
{
app = multipleApps[ i ]
rqsts.push( appService.getActivationDate( app ))
}
$q.all( rqsts )
//this triggers when ALL individual requests have returned
.then( function( rsps ){
//rsps is an array of rsp objects from the individual calls above
for( var iRsp, i = 0; i < rsps.length; i++ )
{
iRsps = rsps[ i ]
multipleApps[ i ].ava_img = iRsps.data.img
}
//we're assigning to scope after we've fetched all the data
$scope.multipleApps = multipleApps
})
})
- 角度:在ng重复上切换图像
- 角度的项目列表 ng 重复,ng 单击显示全宽描述
- 防止ng重复中的重复值(AngularJS)
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 在ng重复循环中显示来自不同文件夹的图像
- 在ng重复循环中显示条件内容的最佳方式是什么
- 离子2:在离子载玻片内产生ng重复
- 正在ng重复元素上添加事件
- 嵌套ng重复angularjs
- ng模型内的ng重复的ng重复开始
- 混合元素的有角度的ng重复
- 如何避免在angular上多次调用方法;s ng重复
- 在表格格式中使用ng重复
- AngularJS ng重复处理空列表事例
- 如何在AngularJS-ng重复循环中将长JSON路径缩短为变量
- Angular在与ng重复作斗争
- ng重复中的ng模型-初始化唯一作用域属性
- ng重复变量到ng模型
- 尝试使用ng重复时出现空白屏幕
- 如何防止由ng重复引起的net::ERR_INSUFICIENT_RESOURCES错误