получить родительский элемент конечного ребенка или внука? - PullRequest
0 голосов
/ 18 февраля 2020

Я работаю с angularjs, и у меня есть этот ответ от моего сервиса и он приходит как дерево, и я представляю эти данные в дерево angular. у этого объекта 4 основных потомка, имя и идентификатор. но эти дети и их дети также имеют детей, имя и идентификатор. Что бы я ни хотел, независимо от того, на какого дочернего элемента я нажимаю, я всегда хочу получить доступ к значению основного root родительского имени, которое является "узлом1", "узлом2", "узлом3" в качестве имени, поэтому я знаю, какой у меня главный родитель и какой родитель в нем нажав.

$scope.loadOrganizationTree = function () {
     userManagementFactory.getOrganizationTree()
     .success(function(data, status) {
        if (JSON.stringify(data.statusType).indexOf("success") > -1) {
            $scope.dataForTheTree = data.statusMsg;     
                }
        } else {
            $scope.setResponseMsgs(data, status);
        }
    }).error(function(data, status) {
        $scope.userErrorMsg = data.statusMsg;
        $scope.showErrorMSg = true ;
    });
<div treecontrol class="tree-light accordion-org-tree"
     style="height: 609px !important;" tree-model="dataForTheTree"
     order-by="name"  reverse-order="false"  options="treeOptions"
     on-selection="showSelected(node, selected, $parentNode, $index, $first, $middle, $last, $odd, $even)"
     selected-node="node1" filter-expression="userProfileOrgSearch">

    {{node.name}} 
</div>
[
  {
    "id": 1,
    "name": "node1",
    "children": [
      {
        "id": 11,
        "name": "node1.1",
        "children": [
          {
            "id": 111,
            "name": "node1.1.1",
            "children": []
          }
        ]
      },
      {
        "id": 12,
        "name": "node1.2",
        "children": []
      }
    ]
  },
  {
    "id": 2,
    "name": "node2",
    "children": [
      {
        "id": 21,
        "name": "node2.1",
        "nodes": []
      },
      {
        "id": 22,
        "name": "node2.2",
        "nodes": []
      }
    ]
  },
  {
    "id": 3,
    "name": "node3",
    "children": [
      {
        "id": 31,
        "name": "node3.1",
        "children": []
      }
    ]
  }
]

До сих пор я пытался получить доступ с помощью $ parentnode, но у меня это не получилось. Пожалуйста, дайте мне знать решение. Заранее спасибо.

1 Ответ

0 голосов
/ 19 февраля 2020

После загрузки данных вы заполняете $ scope.dataForTheTree . Затем вы можете пройти по дереву и установить root каждого узла. Я написал это для вас, используя переменную dataForTheTree с данными вашего примера. После выполнения приведенного ниже, каждому узлу присваивается свойство root с узлом root.

var setRoot = function(elementWithChildren, root) {
    elementWithChildren.root = root;
    if (elementWithChildren.children != null) {
        angular.forEach(elementWithChildren.children, function(child) { setRoot(child, root); });
    }
};
angular.forEach(dataForTheTree, function(rootNode) { setRoot(rootNode, rootNode); });

Мы берем каждый узел дерева и вызываем функцию set Root (). который затем вызывает функцию set Root для каждого из его потомков. Рекурсивный.

...