11
ここで私は、オートコンプリート用のサンプルを作成した細かい作業していると私はthis.currentlyそれがこのangularJSのグリッドとしてオートコンプリートドロップダウンを行う方法は?
のように動作しますが、私はまさに必要なことは、私のようにドロップダウンを表示する必要がある上、いくつかの修正を行う必要がありますグリッドビュー。この上でこの
することができますいずれかの助け?...のようないくつかの 感謝テンプレートはあなたのサンプルデータセット内のすべての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>
あなたのcolumnTwo.htmlのNG-テンプレートで終了二重引用符を逃しています。 '
でもそれが正しく動作しないようにしても –
ええと、仮のテンプレート全体が基本的にあなたのデータ内のすべてのsuggestion.nameに対してng繰り返されているので、テンプレートの中にテーブルの頭を含めることはできませんすべての名前。もちろん、 '{{match.model.designation}}'をそれ自身の ''データ要素に落として同様の効果を得ることはできますが、列ヘッダーはありません。 –
答えて
列挙された名前のそれぞれの上に列ヘッダーが含まれます。
更新: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。
出典
2016-01-22 05:51:05
これは問題ありませんが、私が正確に必要としているのは、すでに2番目の画像に記載されています。 –
ヘッダーが必要です。 –
@SureshB、それは今動作しています。 –
出典
2016-02-18 13:24:12 Nelson
関連する問題