使用 $http 加载 json 数据时的 Angular-grid

Posted

技术标签:

【中文标题】使用 $http 加载 json 数据时的 Angular-grid【英文标题】:Angular-grid when using $http to load json data 【发布时间】:2015-12-30 13:27:04 【问题描述】:

我在一个项目中使用 ag-grid 插件。我使用 $http 服务获取 json 数据。但是网格在网页中显示为空白。但是当直接应用 json 数据时,grid 可以工作。我认为这可能是由于从 $http 获取数据的延迟。但是根据角度概念,网格应该在数据到来时更新。是否有任何解决方案仅在数据来自服务器时才显示 html 页面。

以下是我的 javascript 文件“fileBrowser.js”:

var fileBrowserModule = angular.module('fileBrowser', ['agGrid']);

fileBrowserModule.controller('fileBrowserController', function($scope, $http) 

    $scope.rowData=[
                ];

    $http.get("http://localhost:8080/KKR/flow/sin/allSins.json")
    .success(function(data) 


    $scope.rowData=JSON.parse("["+JSON.stringify(data)+"]");
        console.log($scope.rowData);
    );



 /*  
 $scope.rowData=[                
"group":true,"data":"name":"joe",
    "children":[
                "group":true,"data":"name":"pat",
                    "children":["group":true,
                        "data":"name":"maya",
                        "children":["group":false,
                            "data":"name":"***",
                            "children":[],"group":true,
                                "data":"name":"kery",
                                "children":["group":false,
                                    "data":"name":"santosh",
                                    "children":[]]]],
                                    "group":false,
                                        "data":"name":"aravind","children":[]]
 ]
           */


    var columnDefs = [
        headerName: "Name", field: "name", width: 250,
            cellRenderer: 
                renderer: 'group',
                innerRenderer: innerCellRenderer
            ,
        headerName: "Size", field: "size", width: 70, cellStyle: sizeCellStyle,
        headerName: "Type", field: "type", width: 150,
        headerName: "Date Modified", field: "dateModified", width: 150
       ];

    $scope.gridOptions = 
        columnDefs: columnDefs,
        rowData: $scope.rowData,
        rowSelection: 'multiple',
        rowsAlreadyGrouped: true,
        enableColResize: true,
        enableSorting: true,
        rowHeight: 20,
        icons: 
            groupExpanded: '<i class="fa fa-minus-square-o"/>',
            groupContracted: '<i class="fa fa-plus-square-o"/>'
        ,
        onRowClicked: rowClicked
    ;

    $scope.selectedFile = 'Select a file below...';



    function rowClicked(params) 
        var node = params.node;
        var path = node.data.name;
        while (node.parent) 
            node = node.parent;
            path = node.data.name + '\\' + path;
        
        $scope.selectedFile = path;
    

    function sizeCellStyle() 
        return 'text-align': 'right';
    

    function innerCellRenderer(params) 
        var image;
        if (params.node.group) 
            image = params.node.level === 0 ? 'disk' : 'folder';
         else 
            image = 'file';
        
        var imageFullUrl = '/example-file-browser/' + image + '.png';
        return '<img src="'+imageFullUrl+'" style="padding-left: 4px;" /> ' + params.data.name;
    

);

下面是我的html文件:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">

    <!-- Bootstrap -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css">
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <link href="styles/angular/fileBrowser.css" rel="stylesheet">

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
  <!--   <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script>
  --> 
     <script src=" https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>


    <!-- you don't need ignore=notused in your code, this is just here to trick the cache -->
    <script src="scripts/angular/ag-grid.js?ignore=notused10"></script>
    <link rel="stylesheet" type="text/css" href="styles/angular/ag-grid.css?ignore=notused10">
    <link rel="stylesheet" type="text/css" href="styles/angular/theme-fresh.css?ignore=notused10">

    <script src="scripts/angular/fileBrowser.js"></script>

</head>

<body ng-app="fileBrowser">

    <div ng-controller="fileBrowserController"
         style="border: 1px solid darkgrey;
                width: 600px;
                background-color: lightgrey;
                border-radius: 5px;
                padding: 3px;">
        <div style="border: 1px solid darkgrey; margin-bottom: 2px; background-color: white;"> &nbsp; selectedFile</div>
        <div style="width: 100%; height: 400px;"
             ag-grid="gridOptions"
             class="ag-file-browser">
        </div>

    </div>

</body>
</html>

【问题讨论】:

一些代码示例可以提供帮助吗? 【参考方案1】:

使用 ag-Grid API 设置行数据。

看这个例子“Further Example Starting Point”看看。

代码是

$scope.gridOptions.api.setRows(res.data);

【讨论】:

对于那些没有收到任何错误,但仍然没有显示加载数据的人,然后尝试设置包含ag-gridelement的高度(即。 ),或者如果您在元素的高度中提供 % ,请确保其父元素也具有 height 属性。 请注意,链接中的示例现在不起作用。【参考方案2】:

我已经修改了之前的答案。代替setRows,我们可以使用setRowData。这对我有用:

$scope.gridOptions.api.setRowData(res.data);

【讨论】:

以上是关于使用 $http 加载 json 数据时的 Angular-grid的主要内容,如果未能解决你的问题,请参考以下文章

JMeter 插件 Json Path 解析HTTP响应JSON数据

我正在尝试使用 Jquery-Ajax 使用 JSON 响应,但它不起作用。正在加载空选择下拉列表

Dask 加载 JSON(用于实时绘图)

运行时的Keycloak配置

使用 AngularJS 从 JSON 响应中获取图像 url

使用 yaml-cpp 解析 YAML 时的内存消耗