我已經構建了以下顯示層次結構的Angular應用程序:將篩選應用於分層結構
我試圖在此層次結構頂部插入文本框。過濾底部的數據。已經嘗試過幾個過濾器的例子,但迄今爲止還沒有多少運氣。
我想要做的就是利用角度綁定,當用戶開始鍵入文本框,動態擴展和摺疊層次結構並突出顯示匹配。
尋找一些建議什麼是解決這個問題的最佳方法。請注意,層次結構可能變大並且有大約3000條記錄。
angular.module('HelloWorldApp', [])
.controller('HelloWorldController', function($scope) {
$scope.mp6Root = [];
$scope.mp6Data = [];
var data = [
{
"cls": "L2-013551",
"clsNm": "FASHION DOLLS",
"subCt": "L3-001793",
"subCtNm": "FASHION DOLLS AND ACCESSORIES",
"ct": "L4-000429",
"ctNm": "DOLLS GAMES PUZZLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006472",
"clsNm": "FASHION DOLL WITH ACCS",
"subCt": "L3-001793",
"subCtNm": "FASHION DOLLS AND ACCESSORIES",
"ct": "L4-000429",
"ctNm": "DOLLS GAMES PUZZLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-014668",
"clsNm": "ACTIVITIES",
"subCt": "L3-001793",
"subCtNm": "FASHION DOLLS AND ACCESSORIES",
"ct": "L4-000429",
"ctNm": "DOLLS GAMES PUZZLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-014667",
"clsNm": "STORAGE",
"subCt": "L3-001793",
"subCtNm": "FASHION DOLLS AND ACCESSORIES",
"ct": "L4-000429",
"ctNm": "DOLLS GAMES PUZZLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-014675",
"clsNm": "FASHION DOLL PLAYSET",
"subCt": "L3-001793",
"subCtNm": "FASHION DOLLS AND ACCESSORIES",
"ct": "L4-000429",
"ctNm": "DOLLS GAMES PUZZLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006476",
"clsNm": "ROLE PLAY FASHION AND TOY",
"subCt": "L3-001793",
"subCtNm": "FASHION DOLLS AND ACCESSORIES",
"ct": "L4-000429",
"ctNm": "DOLLS GAMES PUZZLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-014677",
"clsNm": "CORE PS FIGURE W PLAYSET",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006508",
"clsNm": "CORE PS MUSICAL INSTRUMENT",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-014788",
"clsNm": "WAGONS TOYS",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006536",
"clsNm": "RIDING TOYS FOOT TO FLOOR",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-014678",
"clsNm": "CORE PS PUZZLE",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006506",
"clsNm": "CORE PS FIGURE PLAYSET",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006509",
"clsNm": "CORE PS OTHER TOYS",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006511",
"clsNm": "CORE PS TALKING SOUND",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006507",
"clsNm": "CORE PS LEARNING TOY",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006510",
"clsNm": "CORE PS ROLEPLAY",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006512",
"clsNm": "CORE PS VEHICLES",
"subCt": "L3-001798",
"subCtNm": "CORE PRESCHOOL TOYS",
"ct": "L4-000428",
"ctNm": "PRESCHOOL",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006585",
"clsNm": "DIECAST MED LG SCALE VEHICLES",
"subCt": "L3-001818",
"subCtNm": "DIECAST AND PLAYSETS",
"ct": "L4-000425",
"ctNm": "ACT FIGS CONSTRUCTION VEHICLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006587",
"clsNm": "DIECAST PLAYSETS",
"subCt": "L3-001818",
"subCtNm": "DIECAST AND PLAYSETS",
"ct": "L4-000425",
"ctNm": "ACT FIGS CONSTRUCTION VEHICLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006586",
"clsNm": "DIECAST MINI VEHICLES",
"subCt": "L3-001818",
"subCtNm": "DIECAST AND PLAYSETS",
"ct": "L4-000425",
"ctNm": "ACT FIGS CONSTRUCTION VEHICLES",
"seg": "L5-000031",
"segNm": "TOYS",
"area": "L6-000004",
"areaNm": "HARDLINES"
},
{
"cls": "L2-006798",
"clsNm": "VACUUMS UPRIGHT BAGLESS",
"subCt": "L3-001851",
"subCtNm": "FLOOR CLEANING",
"ct": "L4-000449",
"ctNm": "HOME ELECTRICS",
"seg": "L5-000054",
"segNm": "HARD HOME",
"area": "L6-000012",
"areaNm": "IN AND OUTDOOR HOME"
},
{
"cls": "L2-006795",
"clsNm": "VACUUMS HAND",
"subCt": "L3-001851",
"subCtNm": "FLOOR CLEANING",
"ct": "L4-000449",
"ctNm": "HOME ELECTRICS",
"seg": "L5-000054",
"segNm": "HARD HOME",
"area": "L6-000012",
"areaNm": "IN AND OUTDOOR HOME"
},
{
"cls": "L2-006791",
"clsNm": "FLOOR DEEP CLEANER CHEMICALS",
"subCt": "L3-001851",
"subCtNm": "FLOOR CLEANING",
"ct": "L4-000449",
"ctNm": "HOME ELECTRICS",
"seg": "L5-000054",
"segNm": "HARD HOME",
"area": "L6-000012",
"areaNm": "IN AND OUTDOOR HOME"
},
{
"cls": "L2-006796",
"clsNm": "VACUUMS STICK",
"subCt": "L3-001851",
"subCtNm": "FLOOR CLEANING",
"ct": "L4-000449",
"ctNm": "HOME ELECTRICS",
"seg": "L5-000054",
"segNm": "HARD HOME",
"area": "L6-000012",
"areaNm": "IN AND OUTDOOR HOME"
},
{
"cls": "L2-012895",
"clsNm": "FLOOR STEAM MOPS",
"subCt": "L3-001851",
"subCtNm": "FLOOR CLEANING",
"ct": "L4-000449",
"ctNm": "HOME ELECTRICS",
"seg": "L5-000054",
"segNm": "HARD HOME",
"area": "L6-000012",
"areaNm": "IN AND OUTDOOR HOME"
}]
;
$scope.loadMP6DataToMemory = function(data) {
angular.forEach(data, function (value, key) {
if ($.inArray(value.area, $scope.mp6Root) === -1) {
$scope.mp6Root.push(value.area);
}
addToMap(value.cls, value.clsNm, "");
addToMap(value.subCt, value.subCtNm, value.cls);
addToMap(value.ct, value.ctNm, value.subCt);
addToMap(value.seg, value.segNm, value.ct);
addToMap(value.area, value.areaNm, value.seg);
});
}
addToMap = function (pKey, pName, pChild) {
if (!$scope.mp6Data[pKey]) {
cSet = [];
$scope.mp6Data[pKey] = { name: pName, children: cSet };
} else {
if ($.inArray(pChild, $scope.mp6Data[pKey].children) === -1) {
$scope.mp6Data[pKey].children.push(pChild);
}
}
}
$scope.ExpandMP6 = function (pKey) {
if (pKey) {
mp = $scope.mp6Data[pKey];
return {
name: mp.name,
children: mp.children,
visible: false
}
}
}
$scope.loadMP6DataToMemory(data);
$scope.l5visible = false;
$scope.l4visible = false;
$scope.l3visible = false;
$scope.l2visible = false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="container" ng-app="HelloWorldApp" ng-controller="HelloWorldController">
<div class="md-grid">
<ul class="md-list">
<li class="md-list-item-text" ng:repeat="l6 in mp6Root" ng-click="l5visible = !l5visible; $event.stopPropagation();">
L6 {{ExpandMP6(l6).name}}
<ul class="md-list" ng-show="l5visible">
<li class="md-list-item-text" ng:repeat="l5 in ExpandMP6(l6).children" ng-click="l4visible = !l4visible; $event.stopPropagation();">
L5 {{ExpandMP6(l5).name}}
<ul class="md-list" ng-show="l4visible">
<li class="md-list-item-text" ng:repeat="l4 in ExpandMP6(l5).children" ng-click="l3visible = !l3visible; $event.stopPropagation();">
L4 {{ExpandMP6(l4).name}}
<ul class="md-list" ng-show="l3visible">
<li class="md-list-item-text" ng:repeat="l3 in ExpandMP6(l4).children" ng-click="l2visible = !l2visible; $event.stopPropagation();">
L3 {{ExpandMP6(l3).name}}
<ul class="md-list" ng-show="l2visible">
<li class="md-list-item-text" ng:repeat="l2 in ExpandMP6(l3).children">
L2 {{ExpandMP6(l2).name}}
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
編輯: 這是我的想法,但似乎並沒有在路上IVE適應過濾器結構的HTML: how to filter the data from text box in angularjs
如果HTML結構需要改變我打開的建議。
聽起來像是一個非常有趣的任務。我會編寫一個函數,用[Array.prototype.filter](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)過濾列表,然後遍歷父母向他們展示一切。儘管我對Angular一無所知。 – Danmoreng
它是一個有趣的方法,缺點是我需要存儲父路徑,並以某種方式能夠重建列表向後。 – otc
你想過濾出它嵌套的孩子嗎?或單獨的頂級? –