2017-05-17 5 views
0

私はangular-treeview directiveを使用しています。ここで、ツリーを読み込むのに時間がかかるので、その時間のスピナーを表示したいと思います。ですから、私はディレクティブで変数を定義したいと思っています。その変数はビューに使用され、スピナーを表示することができます。ディレクティブのスコープを定義し、ビューで使用する

**angular-treeview.js** 

(function (angular) { 
    'use strict'; 

    angular.module('angularTreeview', []).directive('treeModel', ['$compile', function($compile) { 
      return { 
       restrict: 'A', 
       link: function (scope, element, attrs) { 
        //tree id 
        var treeId = attrs.treeId; 

        //tree model 
        var treeModel = attrs.treeModel; 

        //node id 
        var nodeId = attrs.nodeId || 'id'; 

        //node label 
        var nodeLabel = attrs.nodeLabel || 'label'; 

        //node class 
        var nodeClass = attrs.nodeClass || 'type'; 

        //children 
        var nodeChildren = attrs.nodeChildren || 'children'; 

        //search by label 
        var searchQuery = attrs.searchQuery || ''; 

        //function for highlighting search text 
        var searchHighlightFunction = attrs.searchHighlightFunction || 
         function (content, text) { 
          return content 
         }; 

        //css class to be added for highlighting 
        var searchHighlightClassName = attrs.searchHighlightClassName || ''; 

        //filter to be used with search query 
        var searchFilter = attrs.searchFilter || ''; 

        //tree template 
        var template = 
         '<ul>' + 
          '<li data-ng-repeat="node in ' + treeModel + '| ' + searchFilter + ':' + searchQuery + '" data-ng-init="node.collapsed=true">' + 
           '<i class="collapsed {{node.' + nodeClass + '}}" data-ng-show="node.' + nodeChildren + '.length && node.collapsed" data-ng-click="' + treeId + '.selectNodeHead(node)"></i>' + 
           '<i class="expanded {{node.' + nodeClass + '}}" data-ng-show="node.' + nodeChildren + '.length && !node.collapsed" data-ng-click="' + treeId + '.selectNodeHead(node)"></i>' + 
           '<i class="normal {{node.' + nodeClass + '}}" data-ng-hide="node.' + nodeChildren + '.length"></i> ' + 
           '<span data-ng-class="node.selected" data-ng-click="' + treeId + '.selectNodeLabel(node)" ' + 
            'ng-bind-html="' + searchHighlightFunction + '(node.' + nodeLabel + ', ' + searchQuery + ', \'' + searchHighlightClassName + '\', true)"></span>' + 
           '<div data-ng-hide="node.collapsed" data-tree-id="' + treeId + '" data-tree-model="node.' + nodeChildren + 
            '" data-node-id=' + nodeId + ' data-node-label=' + nodeLabel + ' data-node-children="' + nodeChildren + '"' + 
            ' data-node-class="' + nodeClass + '" data-search-query="' + searchQuery + '" data-search-highlight-function="' + searchHighlightFunction + '"' + 
            ' data-search-highlight-class-name="' + searchHighlightClassName + '" data-search-filter="' + searchFilter + '"></div>' + 
          '</li>' + 
         '</ul>'; 


        //check tree id, tree model 
        if(treeId && treeModel) { 
         /* 
         * to expand or collapse nodes on search text changes 
         */ 
         scope.$watch(searchQuery, function (newVal, oldVal) { 
          var node = scope.node; 
          if (newVal) { 
           if (newVal.length > 0) { 
            if (node) { 
             if ((node[nodeChildren] && node[nodeChildren].length) 
              || (node[nodeChildren] && node[nodeChildren].length)) { 
              node.collapsed = false; 
             } 
            } 
           } 
          } else { 
           if (node && ((node[nodeChildren] && node[nodeChildren].length) 
            || (node[nodeChildren] && node[nodeChildren].length))) { 
            node.collapsed = (scope[treeId].expandedNodes.indexOf(node[nodeLabel]) < 0); 
           } 
          } 
         }); 

         //root node 
         if(attrs.angularTreeview) { 
          //create tree object if not exists 
          scope[treeId] = scope[treeId] || {}; 

          //this is where we are storing nodes by user to distinguish between 
          // those expanded by user from those done for showing search results 
          scope[treeId].expandedNodes = []; 
          scope.$watch(treeModel, function(newVal, oldVal) { 
           if (newVal) { 
            scope[treeId].expandedNodes = []; 
           } 
          }); 

          //if node head clicks, 
          scope[treeId].selectNodeHead = scope[treeId].selectNodeHead || function(selectedNode){ 
           var expandedNodesIndex; 

           //Collapse or Expand 
           selectedNode.collapsed = !selectedNode.collapsed; 
           expandedNodesIndex = scope[treeId].expandedNodes.indexOf(selectedNode[nodeLabel]); 
           if (expandedNodesIndex > -1) { 
            if (selectedNode.collapsed) { 
             scope[treeId].expandedNodes.splice(expandedNodesIndex, 1); 
            } 
           } else { 
            if (!selectedNode.collapsed) { 
             scope[treeId].expandedNodes.push(selectedNode[nodeLabel]); 
            } 
           } 
          }; 

          //if node label clicks, 
          scope[treeId].selectNodeLabel = scope[treeId].selectNodeLabel || function(selectedNode){ 

           //remove highlight from previous node 
           if(scope[treeId].currentNode && scope[treeId].currentNode.selected) { 
            scope[treeId].currentNode.selected = undefined; 
           } 

           //set highlight to selected node 
           selectedNode.selected = 'selected'; 

           //set currentNode 
           scope[treeId].currentNode = selectedNode; 
          }; 
         } 

         //Rendering template. 
         element.html('').append($compile(template)(scope)); 
        } 
       } 
      }; 
     }]); 
})(angular); 

私のhtmlがある - そう

<div data-angular-treeview="true" data-tree-id="Treevalue" 
           data-tree-model="suggestionList" data-node-id="id" data-node-class="type" data-node-label="name" 
           data-node-children="childrens" data-search-query="suggestionListSearchText" data-search-highlight-function="highlightHTML" 
           data-search-highlight-class-name="searchText" data-search-filter="NameFilter"> 
          </div> 

、このディレクティブで変数を定義し、スコープでそれを使用する方法は?

+0

ディレクティブ –

+0

内の範囲を分離してみてください私はディレクティブで分離されたスコープを使用する場合、それはツリーを表示していなかった、このことを試みたが、しています。 –

答えて

0

コード内を見ると、div内にHTMLを追加すると、data-tree-viewという単純なものになる場合があります。このHTMLはツリービューの指示の一部として消去されるので、ディメンションが終了するまでそこに追加したもの(スピナーのようなもの)が表示されます。

編集:

ツリービューのdiv内に画像を追加します。このHTMLは消去されるため、読み込み中のみ表示されます。

<div data-angular-treeview="true" data-tree-id="Treevalue" 
          data-tree-model="suggestionList" data-node-id="id" data-node-class="type" data-node-label="name" 
          data-node-children="childrens" data-search-query="suggestionListSearchText" data-search-highlight-function="highlightHTML" 
          data-search-highlight-class-name="searchText" data-search-filter="NameFilter"> 
    <img src="spinner.gif"> 
</div> 
+0

申し訳ありませんが、あなたが言っていることを理解できません。コードを追加してください。 –

+0

これは私のために働いていません。ツリーを作成するには時間がかかりますが、スピナーgifも動作していません。 –

関連する問題