La directive angulaire dans le plugin jQuery ne fonctionne pas

J'ai une directive qui utilise un plugin jQuery personnalisé, le plugin renvoie le modèle html pour afficher une liste et ça marche bien , MAIS quand j'essaie d'utiliser une directive AngularJs à l'intérieur de ce modèle, quelque chose comme "ng-click" ou l'une de mes personnalités Les directives, il ne suffit pas de le reprendre.

Lorsque j'ouvre la source dans les outils de débogage de firebug ou de chrome, je vois qu'il n'y a pas de classe = "ng-scope" ajoutée à cette div, ce qui est habituellement le cas dans les divs à commande angulaire correctement fonctionnels. Mais je vois que cette div est en hiearchialy sous la division principale ng-app, alors j'ai pensé qu'il fallait hériter de toutes les divisions enfants.

Encore Ce contrôleur et cette directive fonctionnent, la seule partie qui ne fonctionne PAS est le ng-click que j'ai ajouté au modèle de résultat à l'intérieur du plugin jQuery. Quelques idées, quel est le problème ici?

myApp.directive("myDirective", function(){ return{ restrict: 'A', link: function(scope, element,attrs) { $(element).selectAutoComplete({ dataSourceDelegate: scope.dataSource1, dataSourceObject: { value: "id", display: "title"}, resultTemplate: '<div>show some data as list</div> <div id="internalTemplate" ng-click="doSomething()"> Show Next </div>' }); } } }); 

Et dans Html

  <div ng-controller="myController"> <input my-directive type="text" /> </div> 

Pour le HTML généré de manière dynamique, vous devez utiliser le service $compile(element)(scope); comme $compile(element)(scope); Pour le reconnaître par angulaire.

Il est plus difficile si le plugin génère le HTML. Dans mon expérience, les plugins les plus complexes ont leur propre API qui inclut un rappel ou un moyen de vous avertir quand ils sont prêts. Je voudrais examiner les documents du plugin et voir s'il y a un moyen de le faire (ou changer sa source pour le faire vous-même, sinon).

 myApp.directive("myDirective", function($compile, $timeout){ return{ restrict: 'A', link: function(scope, element,attrs) { $(element).selectAutoComplete({ dataSourceDelegate: scope.dataSource1, dataSourceObject: { value: "id", display: "title"}, resultTemplate: '<div>show some data as list</div> <div id="internalTemplate" ng-click="doSomething()"> Show Next </div>' }); // example of what plugin callback could be like - check their docs element.selectAutoComplete("finished", function() { $compile(element)(scope); }); // if not, using $timeout is a fallback that will mostly work but not ideal $timeout(function() { // wait for plugin to complete... $compile(element)(scope); }, 2000); } } }); 

BTW, vous n'avez pas besoin de $(element) car l' element est déjà un objet jquery de toute façon.