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(查询)。刚刚尝试过这个,但显示出相同的行为,它陷入了一个循环中。继续调用函数