2014-10-02 52 views
0

ngGrid是否提供了一種以編程方式隱藏其列的方法。我的計劃是迭代數據並將某些列(無數據)的可見性設置爲false。這是可行的嗎?有沒有解決方法?ng-grid動態地隱藏沒有數據的列

任何幫助將不勝感激。

更新:所以@mainguy讓我有一部分的方式,我能夠找出其他問題。對於其他可能會遇到此問題的人,他們希望做同樣的事情;這裏是鏈接到另一個問題,也幫助我。 how to hide/show ng-grid column externally?

+0

只是不要在columnDefs中包含沒有數據的列。或者更具體地說明你的問題。 – mainguy 2014-10-03 14:34:01

+0

對不起!我應該更具體。我有一組25個預定義的列。數據動態填充列,所以我不知道哪個列將有數據,直到查詢返回結果。 @mainguy – ilndboi 2014-10-07 13:54:58

回答

0

你可以做到這一點與此(醜陋的)代碼:

// main.js 
var app = angular.module('myApp', ['ngGrid']); 
app.controller('MyCtrl', function($scope) { 
    $scope.myData = [{ 
    name: "Moroni", 
    age: 50, 
    value: "" 
    }, { 
    name: "Tiancum", 
    age: 43, 
    value: "" 
    }, { 
    name: "Jacob", 
    age: 27, 
    value: "" 
    }, { 
    name: "Nephi", 
    age: 29, 
    value: "" 
    }, { 
    name: "Enos", 
    age: 34, 
    value: "" 
    }]; 

    $scope.incl_names = false; 
    $scope.incl_ages = false; 
    $scope.incl_values = false; 
    $scope.filtered = []; 
    //first loop: find empty columns 
    angular.forEach($scope.myData, function(row) { 
    if (row.name != "") { 
     $scope.incl_names = true; 
    } 
    if (row.age != "") { 
     $scope.incl_ages = true; 
    } 
    if (row.value != "") { 
     $scope.incl_values = true; 
    } 
    }); 
    //second loop: build new array  
    angular.forEach($scope.myData, function(row) { 
    var build = []; 
    if ($scope.incl_names) { 
     build.name = row.name; 
    } 
    if ($scope.incl_ages) { 
     build.age = row.age; 
    } 
    if ($scope.incl_values) { 
     build.value = row.value; 
    } 

    $scope.filtered.push(build); 
    }); 


    $scope.gridOptions = { 
    data: 'filtered' 
    }; 
}); 

此檢查在第一循環的列是空的,並設置了一些布爾值。然後在第二個循環中,根據開關創建一個新數組,然後告訴ng-grid使用新數組。

當然,這對25列以上的用戶來說並不是很有趣,如果你的網格中有columnDefs,你也可能遇到問題。

無論如何,試試吧here。只需在json的最後一列(值)中輸入一個值即可。

+0

老兄!你真棒!我的網格中有columDefs,但你確實指向了正確的方向,所以我認爲我可以開發一個解決方案。非常感謝!!!!! @mainguy 順便說一句,感謝您的快速響應。 – ilndboi 2014-10-07 15:19:54