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