Angularjs Angular JS从异步http请求加载数据字段值
我已经实现了Angularjs Angular JS从异步http请求加载数据字段值,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,我已经实现了ng repeat来创建一个包含分页的表,该表的所有数据源都来自SharePoint REST API 我面临一个挑战,因为我需要在ng repeat数据源中显示的字段中有一个链接,但我需要从该URL提取数据。我不知道我是否能够传达问题陈述。让我举个例子试试 假设我们有一个数据源,对象数组SearchResult它几乎没有属性,比如: SearchResult.ID SearchResult.ReferenceNumber SearchResult.CreatedBy SearchR
ng repeat
来创建一个包含分页的表,该表的所有数据源都来自SharePoint REST API
我面临一个挑战,因为我需要在ng repeat数据源中显示的字段中有一个链接,但我需要从该URL提取数据。我不知道我是否能够传达问题陈述。让我举个例子试试
假设我们有一个数据源,对象数组SearchResult它几乎没有属性,比如:
SearchResult.ID
SearchResult.ReferenceNumber
SearchResult.CreatedBy
SearchResult.Files//对象中的此Files属性是指向包含有关文件的JSON/XML信息的页面的链接。我需要提取该信息并显示提取的文件链接,而不是指向此页面的链接
请让我知道是否有任何方法可以发送一个异步调用来获取ng repeat
中此特定字段的json/xml
$scope.GetFileNames =function(query)
{
var returndata;
$http({
method: 'GET', url: query,
headers: { "Accept": "application/json;odata=verbose" }
}).
success(function (data, status, headers, config) {
debugger;
returndata= data;
}).
error(function (data, status, headers, config) {
debugger;
// called asynchronously if an error occurs
// or server returns response with an error status.
returndata= data
});
return returndata;
}
<td>
<span>{{GetFileNames(history.Files)}}</span>
</td>
$scope.GetFileNames=函数(查询)
{
var回归数据;
$http({
方法:“获取”,url:query,
标题:{“接受”:“应用程序/json;odata=verbose”}
}).
成功(函数(数据、状态、标题、配置){
调试器;
返回数据=数据;
}).
错误(函数(数据、状态、标题、配置){
调试器;
//发生错误时异步调用
//或服务器返回带有错误状态的响应。
返回数据=数据
});
返回数据;
}
{{GetFileNames(history.Files)}
公开控制器中通过链接获取远程数据的方法,如“GetRemoteFile”,然后在视图中使用{GetRemoteFile(SearchResult.Files)}
$scope.GetRemoteXML = function(endpoint){
// use $resource or $http to get xml/json
}
然后
<li ng-repeat="item in items">
{{GetRemoteXML(item.link)}}
</li>
{{GetRemoteXML(item.link)}
所以这就是我实现给定功能的方式。它并不完全基于angular js,我也不得不使用jquery来解决这个问题
首先,我们需要创建一个已注册的ng click事件指令
appSearch.directive('myPostRepeatDirective', function(){
return function(scope, element, attrs) {
if (scope.$last){
// iteration is complete, do whatever post-processing
// is necessary
setTimeout(function () {
$('[name="fileNames"]').click()
}, 200);
}
};
});
$scope.GetFileNames =function(query, element,$event)
{
var tar = event.target;
var returndata;
$http({
method: 'GET', url: query,
headers: { "Accept": "application/json;odata=verbose" }
}).
success(function (data, status, headers, config) {
var files = "<ul>"
if(data.d.results.length > 0){
angular.forEach(data.d.results,function (file) {
files += "<li> <a href='"+file.ServerRelativeUrl +"' target='_blank'>"+file.Name+" </a> </li>"
});
}
files += "</ul>"
$(tar).html(files);
}).
error(function (data, status, headers, config) {
});
return returndata;
}
<tr ng-repeat="history in HistoryItems" my-post-repeat-directive="foo()" ng-class="{'selected':$index == selectedRow}" ng-click="setClickedRow($index)" >
<td>
<span><a ng-href="" class="link" ng-click="ChangeIframeUrl($index, history.ListItemId, history.Path)">{{history.RetailReferenceNo}}</a></span>
</td>
<td>
<span ng-if="history.RetailTitle == ''">{{history.RetailTitle}}</span> <span>{{history.RetailTitle}}</span>
</td>
<td>
<span> {{history.RetailDocumentDate | date: 'dd-MMM-yyyy'}}</span>
</td>
<td><span>{{history.Created | date: 'dd-MMM-yyyy'}} </span></td>
<td>
<span>{{history.Author}} </span>
</td>
<td>
<span>{{history.RetailStatus}} </span>
</td>
<td>
<span>{{history.RetailRevision}} </span>
</td>
<td>
<span name="fileNames" ng-click="GetFileNames(history.Files, this)"></span>
</td>
</tr>
appSearch.directive('myPostRepeatDirective',function(){
返回函数(范围、元素、属性){
如果(范围$last){
//迭代完成后,做任何后处理
//有必要
setTimeout(函数(){
$('[name=“fileNames”]')。单击()
}, 200);
}
};
});
$scope.GetFileNames=函数(查询、元素、$event)
{
var tar=event.target;
var回归数据;
$http({
方法:“获取”,url:query,
标题:{“接受”:“应用程序/json;odata=verbose”}
}).
成功(函数(数据、状态、标题、配置){
var files=“”
如果(data.d.results.length>0){
angular.forEach(data.d.results,函数(文件){
文件+=“”
});
}
文件+=“
”
$(tar).html(文件);
}).
错误(函数(数据、状态、标题、配置){
});
返回数据;
}
{{history.RetailTitle}{{history.RetailTitle}}
{{history.RetailDocumentDate}日期:'dd-MMM-yyyy'}
{{history.Created}日期:'dd-MMM-yyyy'}
{{history.Author}}
{{history.RetailStatus}
{{history.RetailRevision}
感谢您的及时回复,这正是我所做的,但不知何故,这会挂起浏览器窗口。。。它会继续调用该函数,并返回一个空字符串,因为该函数以异步方式执行。它返回变量时不会成功或出现任何问题。您能否回答函数/相关代码的问题?请尝试返回$http(…)本身$http.get(查询)。刚刚尝试过这个,但显示出相同的行为,它陷入了一个循环中。继续调用函数