11

ここで私は、オートコンプリート用のサンプルを作成した細かい作業していると私はthis.currentlyそれがこのangularJSのグリッドとしてオートコンプリートドロップダウンを行う方法は?

enter image description here

のように動作しますが、私はまさに必要なことは、私のようにドロップダウンを表示する必要がある上、いくつかの修正を行う必要がありますグリッドビュー。この上でこの enter image description here

することができますいずれかの助け?...のようないくつかの 感謝テンプレートはあなたのサンプルデータセット内のすべてのsuggestion.nameのために繰り返されているので、私は、コメントしたよう

var app = angular.module('app', ['ui.bootstrap']); 
 

 
    app.controller('TypeaheadCtrl', function ($scope, $http, limitToFilter, filterFilter) { 
 

 
    
 
    $scope.sample_data = [{ 
 
     "name": "Nelson", 
 
     "designation":"Senior Developer", 
 
     "company": "acme", 
 
     "companydisplay": "abc" 
 
     }, 
 
     { 
 
     "name": "suresh", 
 
     "designation":"Developer", 
 
     "company": "acme", 
 
     "companydisplay": "def" 
 
     }, 
 
     { 
 
     "name": "Naresh", 
 
     "designation":"Developer", 
 
     "company": "acme", 
 
     "companydisplay": "xyz" 
 
     }]; 
 

 
    $scope.filtered_sample_data = function (search) { 
 
     var filtered = filterFilter($scope.sample_data, search); 
 
     
 
     var results = _(filtered) 
 
     .groupBy('company') 
 
     .map(function (g) { 
 
      g[0].initial = true; // the first item in each group 
 
      return g; 
 
     }) 
 
     .flatten() 
 
     .value(); 
 
     return results; 
 
    }; 
 
    });
body { 
 
    font-family:'Trebuchet MS', Verdana, sans-serif; 
 
    margin:20px 0px; 
 
    padding:0px; 
 
    text-align:center; 
 
} 
 
.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { 
 
    cursor:pointer; 
 
} 
 
label { 
 
    cursor:default; 
 
    margin:0; 
 
} 
 
.form { 
 
    width:400px; 
 
    margin:0px auto; 
 
    text-align:left; 
 
    background:#F2F1F0; 
 
    border-top-left-radius: 10px 5px; 
 
    border-top-right-radius: 10px 5px; 
 
    border:1px solid #474641; 
 
} 
 
.formHeader { 
 
    background:#474641; 
 
    color:#ddd; 
 
    padding:4px; 
 
    font-weight:600; 
 
    border-top-left-radius: 10px 5px; 
 
    border-top-right-radius: 10px 5px; 
 
} 
 
.formBody { 
 
    padding:10px; 
 
} 
 
.data { 
 
    margin:0px auto; 
 
    text-align:left; 
 
} 
 
.dropdown-menu { 
 
    text-align:left; 
 
} 
 
table { 
 
    border-collapse: collapse; 
 
    width: 100%; 
 
} 
 
th{ 
 
    background-color: #29ABE2; 
 
    color: white; 
 
} 
 
tr> td { 
 
    text-align: left; 
 
} 
 
th, td { 
 
    padding: 15px; 
 

 
} 
 
tbody>tr:hover { 
 
    background-color: #0088cc; 
 
    color: white; 
 
} 
 

 
.headerSortUp { 
 
    background: url(http://tablesorter.com/themes/blue/bg.gif) no-repeat 99%; 
 
} 
 
.headerSortDown { 
 
    background: url(data:image/gif; 
 
    base64, R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7) no-repeat 99%; 
 
} 
 
    
 
.suggestion-name { min-width: 100px; } 
 
.suggestion-designation { min-width: 100px; } 
 
.suggestion-company { min-width: 100px; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.6.0.js"></script> 
 
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet"/> 
 
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet"/> 
 
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-dropdown.js"></script> 
 
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script> 
 

 
    
 

 
<div ng-app="app"> 
 
    <div class='container-fluid' ng-controller="TypeaheadCtrl"> 
 
     <!-- <pre>Model: {{result | json}}</pre> 
 
     <input type="text" ng-model="result" typeahead="suggestion for suggestion in cities($viewValue)"> 
 
--> <pre>Model: {{monkey | json}}</pre> 
 

 
     <input type="text" ng-model="monkey" typeahead-template-url="columnTwo.html" typeahead="suggestion.name for suggestion in filtered_sample_data($viewValue) | filter: $viewValue"> 
 

 
    </div> 
 
    <!-- CACHE FILE: columnTwo.html --> 
 
    <script type="text/ng-template" id="columnTwo.html"> 
 
     <table class=""> 
 
      <thead ng-if="match.model.initial"> 
 
      <tr> 
 
       <th>Name</th> 
 
       <th>Designation</th> 
 
       <th>Company</th> 
 
      </tr> 
 
      </thead> 
 
     <tr> 
 
     <td class="suggestion-name"> 
 
     <div ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)"> 
 
      <a>{{ match.model.name }} </a> 
 
     </div> 
 
     </td> 
 
     <td class="suggestion-designation"> {{ match.model.designation }} </td> 
 
     <td class="suggestion-company"> {{ match.model.companydisplay }} </td> 
 
     </tr> 
 
     </table> 
 
    </script>

+0

あなたのcolumnTwo.htmlのNG-テンプレートで終了二重引用符を逃しています。 '

'にする必要があります。グリッドが表示されます。 –

+0

でもそれが正しく動作しないようにしても –

+0

ええと、仮のテンプレート全体が基本的にあなたのデータ内のすべてのsuggestion.nameに対してng繰り返されているので、テンプレートの中にテーブルの頭を含めることはできませんすべての名前。もちろん、 '{{match.model.designation}}'をそれ自身の '​​'データ要素に落として同様の効果を得ることはできますが、列ヘッダーはありません。 –

答えて

9

列挙された名前のそれぞれの上に列ヘッダーが含まれます。

更新:this previous SO answerにある陪審員向けの解決策は、angleのfilterFilterを注入して、代わりに$scope.sample_dataをコレクションとして使用して、代わりに$ viewValueに基づいて事前にフィルタリングされたグループを作成することです。データセット内のすべての人物をグループ化するために、それぞれに会社のプロパティを追加しました(ここでは前提としています)。フィルタリングされたデータセットの最初の要素にインジケータプロパティ(この場合はinitial = true)を設定できます。

そして最後に、あなたのテンプレートで、suggestion.name for suggestion in filtered_sample_data($viewValue) | filter: $viewValue">にごtypeahead属性値を変更することに加えて、あなたは `match.model.initial」がtrueの場合にのみ表示するように、テーブルの上に頭ng-ifを設定します。

データセット内のすべての人物が、セット内の他のすべての人物と同じ値を持つ一般的なプロパティーを持ち、そのプロパティーでグループ化する限り、これは機能します。

[フィルタがlodashの暗黙のチェーンを使用していますので、私は同様にlodash.jsためのスクリプトタグを追加することに注意してください。]この問題を回避するための

クレジット@runTarm。

var app = angular.module('app', ['ui.bootstrap']); 
 

 
    app.controller('TypeaheadCtrl', function ($scope, $http, limitToFilter, filterFilter) { 
 

 
    
 
    $scope.sample_data = [{ 
 
     "name": "Nelson", 
 
     "designation":"GM", 
 
     "company": "acme" 
 
     }, 
 
     { 
 
     "name": "suresh", 
 
     "designation":"Developer", 
 
     "company": "acme" 
 
     }, 
 
     { 
 
     "name": "Naresh", 
 
     "designation":"Developer", 
 
     "company": "acme" 
 
     }]; 
 

 
    $scope.filtered_sample_data = function (search) { 
 
     var filtered = filterFilter($scope.sample_data, search); 
 

 
     var results = _(filtered) 
 
     .groupBy('company') 
 
     .map(function (g) { 
 
      g[0].initial = true; // the first item in each group 
 
      return g; 
 
     }) 
 
     .flatten() 
 
     .value(); 
 
    
 
     return results; 
 

 
    }; 
 
    });
body { 
 
    font-family:'Trebuchet MS', Verdana, sans-serif; 
 
    margin:20px 0px; 
 
    padding:0px; 
 
    text-align:center; 
 
} 
 
.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { 
 
    cursor:pointer; 
 
} 
 
label { 
 
    cursor:default; 
 
    margin:0; 
 
} 
 
.form { 
 
    width:400px; 
 
    margin:0px auto; 
 
    text-align:left; 
 
    background:#F2F1F0; 
 
    border-top-left-radius: 10px 5px; 
 
    border-top-right-radius: 10px 5px; 
 
    border:1px solid #474641; 
 
} 
 
.formHeader { 
 
    background:#474641; 
 
    color:#ddd; 
 
    padding:4px; 
 
    font-weight:600; 
 
    border-top-left-radius: 10px 5px; 
 
    border-top-right-radius: 10px 5px; 
 
} 
 
.formBody { 
 
    padding:10px; 
 
} 
 
.data { 
 
    margin:0px auto; 
 
    text-align:left; 
 
} 
 
.dropdown-menu { 
 
    text-align:left; 
 
} 
 
table, td, th {  
 
    border: 1px solid #ddd; 
 
    text-align: left; 
 
} 
 

 
table { 
 
    border-collapse: collapse; 
 
    width: 100%; 
 
} 
 

 
th, td { 
 
    padding: 15px; 
 
} 
 
.suggestion-name { min-width: 100px; } 
 
.suggestion-designation { min-width: 100px; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.6.0.js"></script> 
 
<link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet"/> 
 
<link href="http://getbootstrap.com/2.3.2/assets/css/bootstrap.css" rel="stylesheet"/> 
 
<script src="http://getbootstrap.com/2.3.2/assets/js/bootstrap-dropdown.js"></script> 
 
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script> 
 

 
    
 

 
<div ng-app="app"> 
 
    <div class='container-fluid' ng-controller="TypeaheadCtrl"> 
 
     <!-- <pre>Model: {{result | json}}</pre> 
 
     <input type="text" ng-model="result" typeahead="suggestion for suggestion in cities($viewValue)"> 
 
--> <pre>Model: {{monkey | json}}</pre> 
 

 
     <input type="text" ng-model="monkey" typeahead-template-url="columnTwo.html" typeahead="suggestion.name for suggestion in filtered_sample_data($viewValue) | filter: $viewValue"> 
 

 
    </div> 
 
    <!-- CACHE FILE: columnTwo.html --> 
 
    <script type="text/ng-template" id="columnTwo.html"> 
 
     <table class=""> 
 
      <thead ng-if="match.model.initial"> 
 
      <tr> 
 
       <th>Name</th> 
 
       <th>Designation</th> 
 
      </tr> 
 
      </thead> 
 
     <tr> 
 
     <td class="suggestion-name"> 
 
     <div ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)"> 
 
      <a>{{ match.model.name }} </a> 
 
     </div> 
 
     </td> 
 
     <td class="suggestion-designation"> {{ match.model.designation }} </td> 
 
     </tr> 
 
     </table> 
 
    </script> 
 

+0

これは問題ありませんが、私が正確に必要としているのは、すでに2番目の画像に記載されています。 –

+0

ヘッダーが必要です。 –

+0

@SureshB、それは今動作しています。 –

1

agGrid.initialiseAgGridWithAngular1(angular); 
 
function showGrid(val) 
 
\t \t { 
 
\t \t \t console.log(val.length) 
 
\t \t \t if(val.length <3){ 
 
    \t \t \t \t document.getElementById('myGrid').style.display='none' 
 
\t \t \t } 
 
\t \t \t else 
 
\t \t \t { 
 
\t \t \t \t \t \t console.log("hide count") 
 
\t \t \t \t document.getElementById('myGrid').style.display='block' 
 
\t \t \t } 
 
\t \t } 
 
var fileBrowserModule = angular.module('basic', ['agGrid']); 
 

 
fileBrowserModule.controller('basicController', function($scope) { 
 
\t 
 
\t $scope.gridheader = [ 
 
\t \t \t \t \t {headerName: "Make", field: "make"}, 
 
\t \t \t \t \t {headerName: "Model", field: "model"}, 
 
\t \t \t \t \t {headerName: "XModel", field: "model"}, 
 
\t \t \t \t \t {headerName: "Rate", field: "price"}, 
 
\t \t \t \t \t {headerName: "Price", field: "price"} 
 
\t \t \t \t ]; 
 
    $scope.rowData = [ 
 
\t \t \t \t \t {make: "Toyota", model: "Celica", price: 35000}, 
 
\t \t \t \t \t {make: "Ford", model: "Mondeo", price: 32000}, 
 
\t \t \t \t \t {make: "Porsche", model: "Boxter", price: 72000}, 
 
\t \t \t \t \t {make: "Audi", model: "Boxter", price: 92000}, 
 
\t \t \t \t \t {make: "Toyota", model: "Celica", price: 35000}, 
 
\t \t \t \t \t {make: "Ford", model: "Mondeo", price: 32000}, 
 
\t \t \t \t \t {make: "Porsche", model: "Boxter", price: 72000}, 
 
\t \t \t \t \t {make: "Audi", model: "Boxter", price: 92000} 
 
\t \t \t \t ]; 
 
\t 
 
\t 
 
    
 

 
    $scope.gridOptions = { 
 
     columnDefs: $scope.gridheader, 
 
     rowData: $scope.rowData, 
 
\t \t onSelectionChanged: onSelectionChanged, 
 
     rowSelection: 'single', 
 
     enableColResize: true, 
 
     enableSorting: true, 
 
     enableFilter: true, 
 
     groupHeaders: true, 
 
     rowHeight: 22, 
 
     onModelUpdated: onModelUpdated, 
 
     suppressRowClickSelection: false 
 
\t \t 
 

 
    }; 
 

 
    function onModelUpdated() { 
 
     var model = $scope.gridOptions.api.getModel(); 
 
     var totalRows = $scope.gridOptions.rowData.length; 
 
     var processedRows = model.getVirtualRowCount(); 
 
\t \t  $scope.rowCount = processedRows.toLocaleString() + '/' + totalRows.toLocaleString(); 
 
    } 
 
\t 
 
\t function onSelectionChanged() { 
 
    \t var selectedRows = $scope.gridOptions.api.getSelectedRows(); 
 
    var selectedRowsString = ''; 
 
    selectedRows.forEach(function(selectedRow, index) { 
 
     if (index!=0) { 
 
      selectedRowsString += ', '; 
 
     } 
 
     selectedRowsString += selectedRow.make; 
 
    }); 
 
\t $scope.gridOptions.quickFilterText = selectedRowsString; 
 
    document.querySelector('#selectedRows').innerHTML = selectedRowsString; 
 
\t document.getElementById('myGrid').style.display='none' 
 
} 
 

 
document.addEventListener('DOMContentLoaded', function() { 
 
    var gridDiv = document.querySelector('#myGrid'); 
 
    
 
}); 
 

 
    
 

 
});
<script src="https://www.ag-grid.com/dist/ag-grid.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.8/angular.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script> 
 

 
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css" rel="stylesheet"/> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 
<head lang="en"> 
 
    <meta charset="UTF-8"> 
 
    
 
</head> 
 

 
<body ng-app="basic"> 
 

 
    <div ng-controller="basicController" style="width: 800px;"> 
 
     <div style="padding: 4px"> 
 
      <div style="float: left;"> 
 
       <p>type audi or toyota</p><input type="text" ng-model="gridOptions.quickFilterText" onKeyPress="return showGrid(this.value)" placeholder="Type text to filter..."/> 
 
      </div> 
 
      <div style="padding: 4px;"> 
 
        <span id="selectedRows"> 
 
    </span> 
 
({{rowCount}}) 
 
      </div> 
 
      <div style="clear: both;"/> 
 
     </div> 
 
     <!--<grid-Wrapper get-header="gridheader" get-data="rowData" enable-Filter="{{true}}" enable-Sorting="{{true}}" enable-Col-Resize="{{true}}"></grid-Wrapper>--> 
 
     
 
     <div id="myGrid" style="width: 100%; height: 400px; display:none" 
 
      ag-grid="gridOptions" 
 
      class="ag-fresh ag-basic" > 
 
     </div> 
 
    </div> 
 

 
</body> 
 
</html>

関連する問題