你试图做的很好,元素被添加到DOM。但问题是添加的元素需要注意角度,因为它有一个指令,并且需要以这种方式进行渲染。因此,您需要使用$compile
service重新编译要添加的元素。所以在将元素添加到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.
});
}]);
Demo
而是结合事件手动你可以只渲染整个按钮与(使塔上的标记指令属性会在提供替代选项指令呈现的元素为好)
.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>
Demo
来源
2014-09-01 23:38:02
PSL
必须使用'$ compile',见角文档 – charlietfl 2014-09-01 23:27:11
http://jsfiddle.net/pLL0pxqb/3/既然你添加你需要让角知道这么一个新元素该指令是重新编译的。 – PSL 2014-09-01 23:28:21
@PSL你给了我一个答案。谢谢你,为了回答这个问题,你介意解释一下吗? – 2014-09-01 23:31:53