2017-10-04 6 views
0

J'ai la directive suivante:

// expose directive 
     return { 
      restrict: 'E', 
      link: linkFn, 
      scope: { 
       treeModel: "<" 
      }, 
      controller: function ($scope) { 
       var vm = this; 
      }, 
      controllerAs: 'vm' 
     }; 

Ce que je veux faire est de regarder les changements sur treeModel, donc dans ma fonction de lien que je l'ai fait comme suit:

function linkFn(scope, element, attrs) { 
    scope.$watch('treeModel', function(value){ 
     if(value instanceof Array){ 
      scope.tree.jstree(true).settings.core.data = value; 
      scope.tree.jstree(true).refresh(); 
     } 
    }); 
} 

ce qui fonctionne dans ce cas (ce code est exécuté deux fois la première fois value est non défini, mais la deuxième fois value est un tableau d'objets), mais je veux mettre en œuvre le crochet $onChanges, depuis que je m plann ING migrer mon application angulaire 2, donc je l'ai fait comme suit:

// expose directive 
     return { 
      restrict: 'E', 
      link: linkFn, 
      scope: { 
       treeModel: "<" 
      }, 
      controller: function ($scope) { 
       var vm = this; 
       vm.$onChanges = function (changes) { 
        if($scope.treeModel instanceof Array){ 
         $scope.tree.jstree(true).settings.core.data = $scope.treeModel; 
         $scope.tree.jstree(true).refresh(); 
        } 

       }; 
      }, 
      controllerAs: 'vm' 
     }; 

Et puis je l'ai enlevé le code scope.$watch de ma fonction de lien.

Quand j'ai essayé cela, il ne fonctionne pas et vm.$onChanges obtenir déclenché qu'une seule fois où la valeur est définie et ne se déclenche la deuxième fois avec le scope.$watch, et le paramètre changes est toujours définie quand il doit être un objet où Les clés sont des noms de liaisons qui changent.

Comment puis-je résoudre ce problème?

+0

Pouvez-vous s'il vous plaît poster un [* Exemple minimal, complet et vérifiable *] (https://stackoverflow.com/help/mcve)? –

Répondre