你想做的很好,元素被添加到 DOM 中。但问题是添加的元素需要 Angular 的关注,因为它有一个指令并且需要以这种方式呈现。因此,您需要重新编译使用$compile
服务添加的元素。因此,在将元素添加到 DOM 之后,您基本上是在编译元素以呈现指令,并在此过程中为其附加相应的范围。
.directive('addSummernote', ['$compile', function ($compile) {
var template = '<summernote config="options" on-image-upload="imageUpload(files, editor, welEditable);"></summernote>';
return function (scope, element, attrs) {
element.click(function () {
var elm = angular.element(template); //Get the element
element.parent().find(".summernotes").append(elm); //Append it to DOM
$compile(elm)(scope); //Now compile it to render the directive.
});
}]);
演示
除了手动绑定事件之外,您还可以将整个按钮呈现为一个指令(替换选项,以便标记上的指令上的属性也可以在呈现的元素中使用。)
.directive('addSummernote', function ($compile) {
var template = '<summernote config="options" on-image-upload="imageUpload(files, editor, welEditable);"></summernote>';
return {
restrict:'E',
replace:true,
template: '<input type="submit" value="Add 1+ Editor" ng-click="addEditor()">',
link: function (scope, element, attrs) {
//Click function handler
scope.addEditor = function(){
var elm = angular.element(template);
element.parent().find(".summernotes").append(elm);
//Or just do element.prev().append(elm);
$compile(elm)(scope);
}
}
}
});
并用作:-
<add-summernote id="append" class="btn bg-blue full-width" style="margin-top: 15px;"></add-summernote>
演示