I hierarchische Daten wie diese:Angular anhängen Eltern Attributwert
[
{
"children":[
{
"children":[...],
[...]
},
{
"children":[...],
[...]
},
],
[...]
}
]
Ich mag, dass die Daten durch Abflachen baumartige Raster bauen. Ich bin mit dem folgenden Direktiven:
app.directive('tree', function (hierarchyService, logger, $timeout) {
return {
scope: {
data: '='
},
restrict: 'E',
replace: true,
template: '<div>' +
'<table class="table table-striped table-hover">' +
' <thead>' +
' <tr>' +
' <th class="col-md-6">Account name</th>' +
' </tr>' +
' </thead>' +
' <tbody><tr collection data="data" /></tbody>' +
' </table>' +
'</div>'
};
});
app.directive('collection', function() {
return {
restrict: "A",
replace: true,
scope: {
data: '=',
depth: '@'
},
template: '<member ng-repeat="member in data" member="member" depth="{{depth}}" />',
link: function (scope, element, attrs) {
scope.depth = parseInt(scope.depth || 0);
}
}
});
app.directive('member', function($compile) {
return {
restrict: "E",
replace: true,
scope: {
depth: '@',
member: '='
},
template: '<tr ng-class="{selected: member.selected}">' +
'<td>' +
' <span ng-show="depth > 0" style="width: {{depth * 16}}px; display: inline-block;"></span> {{member.name}}' +
'</td>' +
'</tr>',
link: function (scope, element, attrs) {
scope.depth = parseInt(scope.depth || 0);
if (angular.isArray(scope.member.children) && scope.member.children.length > 0) {
var el = angular.element('<tr collection data="member.children" depth="{{newDepth}}" />');
scope.depth = parseInt(scope.depth || 0);
scope.newDepth = scope.depth + 1;
$compile(el)(scope);
// Flatten hierarchy, by appending el to parent
element.parent().append(el);
}
}
}
});
Das Problem ist, dass in der Sammlung von link
Methode hinzugefügt, depth
von übergeordnetem Bereich auf newDepth
angehängt. Als Ergebnis hat depth
für Knoten der Ebene 3 den Wert depth="3 2 1 "
.
Wie zum Erben von depth
deaktivieren?
Ich habe auch bemerkt, dass, wenn ich replace
auf false in collection
und member
Richtlinien ändern, Tiefe wie vorgesehen funktioniert, aber dann ist HTML ungültig.
Könnten Sie ein Plunker oder Geige für Ihren Fall zur Verfügung stellen? –
@SpartakLalaj Hier sind Sie: https://plnrkr.co/edit/CE2z5WeU41H4qJQQ73B7?p=preview – Krzysztof
Ich entfernte Tiefe Attribut und erklärte es mit Gleichheitszeichen in der Sammlung und scheint, dass die Zahlen korrekt sind. Probieren Sie, ob das das richtige Ergebnis ist! –