2016-04-21 4 views
0

In meinem Projekt habe ich enthalten: JQuery, JSTree, Angular und NgJsTree. Wenn ich mein treeData-Modell aktualisiere, wird die Datenänderung nicht in der Baumstruktur angezeigt.Wie kann ich veranlassen, dass NgJsTree Modellupdates anwendet?

tcwsApp.service('explorerService', ['$http', '$log', '$timeout', 
 
     function($http, $log, $timeout) { 
 
     var service = this; 
 

 
     service.treeData = { 
 
      rootNodes: [{ 
 
      "text": "Initial node" 
 
      }] 
 
     }; 
 

 
     return ({ 
 
      getTreeData: getTreeData, 
 
      initService: initService 
 
     }); 
 

 
     function initService() { 
 
      getRootNodes(); 
 
     } 
 

 
     function getTreeData() { 
 
      return service.treeData; 
 
     } 
 

 
     function getRootNodes() { 
 
      var request = $http.get("api/explorer"); 
 

 
      request.then(function(response) { 
 
      $log.debug(response); 
 
      service.treeData.rootNodes = response.data.list; 
 
      }, function(response) { 
 
      $log.error(response); 
 
      }); 
 
     } 
 
     } 
 
    ]); 
 

 
    tcwsApp.controller('explorerController', ['$log', 'explorerService', 
 
     function($log, explorerService) { 
 
     var explorer = this; 
 
     explorerService.initService(); 
 
     explorer.treeData = explorerService.getTreeData(); 
 

 
     explorer.applyChanges = function() { 
 
      return true; 
 
     }; 
 

 
     explorer.treeConfig = { 
 
      core: { 
 
      multiple: false, 
 
      animation: true, 
 
      error: function(error) { 
 
       $log.error('treeCtrl: error from js tree - ' + angular.toJson(error)); 
 
      }, 
 
      check_callback: true, 
 
      worker: true 
 
      }, 
 
      version: 1, 
 
      plugins: ['types', 'checkbox'] 
 
     }; 
 
     } 
 
    ]); 
 

 
    tcwsApp.directive('explorerTree', function() { 
 
     return { 
 
     templateUrl: 'app/template/explorer_tree.html' 
 
     }; 
 
    });
<!DOCTYPE HTML> 
 
<html ng-app="tcwsApp"> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>TCWS</title> 
 

 
    <link rel="stylesheet" href="lib/jstree/themes/default/style.min.css" /> 
 
    <link rel="stylesheet" href="lib/lht-bootstrap/css/bootstrap.min.css"> 
 
    <link rel="stylesheet" href="lib/lht-bootstrap/css/bootstrap-theme.min.css"> 
 
    <link rel="stylesheet" href="app/tcws_app.css"> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
    <script src="lib/angular-messages.js"></script> 
 
    <script src="lib/jstree/jstree.js"></script> 
 
    <script src="lib/jstree/ngJsTree.js"></script> 
 

 
    <script src="lib/lht-bootstrap/js/bootstrap.min.js"></script> 
 
</head> 
 

 
<body> 
 

 
    <tcws-app> 
 
    <!-- directive contents pasted --> 
 
    <explorer-tree> 
 
     <div class="col-md-4" ng-controller="explorerController as explorer"> 
 
     <div js-tree="explorer.treeConfig" ng-model="explorer.treeData.rootNodes" should-apply="explorer.applyChanges()" tree-events="ready:readyCB;create_node:createNodeCB" tree="explorer.treeInstance"> 
 
      {{explorer.treeData.rootNodes}} 
 
     </div> 
 
    </explorer-tree> 
 
    </tcws-app> 
 

 
    <script src="app/tcws_app.js"></script> 
 
    <script src="app/controller/explorer_tree.js"></script> 
 
</body> 
 

 
</html>

Dies zeigt den Anfangsknoten - aber die Debug-Ausgabe über {{}} explorer.treeData.rootNodes nach den http.get Anfrage beendet korrekt aktualisiert wird.

Resulting web page

Antwort

0

Jstree hat 2 json Formate:

  • default: Knoten w/Kinder
  • Alternative: Knoten w/Eltern

Automatische Updates auf Modellwechsel sind nur möglich, mit dem alternativen Format wie hier angegeben: Github Issue.

Verwandte Themen