web-dev-qa-db-fra.com

Insérer une directive par programme angular

Donc, je veux essentiellement pouvoir déclencher un événement, puis avoir une directive à compiler et à insérer son auto à une position dans le DOM. Actuellement, j'ai quelque chose comme ça

//controller
  angular.module('app').controller('MainCtrl', function ($scope, $compile) {

    $scope.$on('insertItem',function(ev,attrs){
      var el = $compile( "<chart></chart>" )( $scope );
      $scope.insertHere = el;
    });

  });


// directive
 angular.module('app')
  .directive('chart', function () {
    return {
      template: '<div>My chart</div>',
      restrict: 'E',
      link: function postLink(scope, element, attrs) {
        element.text('this is a chart');
      }
    };
  });

Je suis capable de voir l'objet "el" avec tout ce dont j'ai besoin mais je ne suis pas en mesure de l'insérer dans le DOM ... des indices?

40
climboid

Vous devez d'abord créer l'élément dom, puis le compiler et l'ajouter au document. Quelque chose comme ça:

$scope.$on('insertItem',function(ev,attrs){
  var chart = angular.element(document.createElement('chart'));
  var el = $compile( chart )( $scope );

  //where do you want to place the new element?
  angular.element(document.body).append(chart);

  $scope.insertHere = el;
};

J'ai créé un exemple simple ici: http://plnkr.co/edit/n7SZpyeQ9nbjVSYA7ibB?p=preview

47
joakimbl