一尘不染

以编程方式插入指令

angularjs

因此,我基本上希望能够触发一个事件,然后进行伪指令编译并将其自身插入DOM中的某个位置。目前我有这样的事情

//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');
      }
    };
  });

我可以看到具有所有所需内容的“ el”对象,但无法将其插入到DOM中……有什么线索吗?


阅读 178

收藏
2020-07-04

共1个答案

一尘不染

您必须先创建dom元素,然后对其进行编译并将其添加到文档中。像这样:

$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;
};

我在这里创建了一个简单的示例:http :
//plnkr.co/edit/n7SZpyeQ9nbjVSYA7ibB?p=preview

2020-07-04