angularjs中的CKEditor自定义插件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了angularjs中的CKEditor自定义插件相关的知识,希望对你有一定的参考价值。

我有CKEditor 4在AngularJS中工作,我之前为CKEditor创建了自定义插件但是我在访问angularjs中的范围时遇到了问题。涉及的部分是:

  1. ckeditor指令 - 创建属性并绑定到模型
  2. 指令的控制器
  3. 插件代码 - 需要在控制器中运行一些东西

我在第3部分遇到了麻烦。这是代码。首先是指令

function ckeditor() {
    return {
        controller: htmlEditorCtrl,
        controllerAs: 'htmlEditorCtrl',
        bindToController: true,
        require: 'ngModel',
        link: function (scope, element, attr, ngModel) {
            editorOptions = {...
                extraPlugins: 'help'
            }
            var ckeditor = element.ckeditor(editorOptions);
            //ckeditor.setData = ngModel.$modelValue;

            // update ngModel on change
            ckeditor.editor.on('change', function () {
                ngModel.$setViewValue(this.getData());
            });
        }
    }
}

然后一个简单的控制器

HTMLEditorCtrl.$inject = ["$scope", "$rootScope"];
function HTMLEditorCtrl($scope, $rootScope) {
    var vm = this;
    vm.openHelp = openHelp;

    function openHelp() {
        var x = 1;
        // HERE'S where I want to do stuff
    }
}

和插件 - 它工作,并在一个单独的文件中,除了我找不到一种方法来触发控制器功能。

(function () {
var cmd = {
    canUndo: false, 
    exec: function (editor) {
        alert("open help");  // works
        // none of these references work
        var x = $scope;
        var x = $rootScope;
        var x = vm;
        ...
    }
};

CKEDITOR.plugins.add('help', {
    icons: 'help',
    init: function (editor) {
        // this fires when the editor loads
        editor.addCommand('help', cmd);
        editor.ui.addButton('help', { label: 'Help', command: 'help', toolbar: 'help' });
    }
});
})();

有什么建议?

答案

我从来没有为我发布的场景找到解决方案,但我确实找到了一种在angularjs中工作的方法。基本上,插件文件代码必须移动到指令。所以在初始化编辑器实例的代码之前我添加了...

if (!CKEDITOR.plugins.registered['help']) {
    CKEDITOR.plugins.add('help', {
        icons: 'help',
        init: function (editor) {
            editor.addCommand('help', {
                exec: function (editor) {
                    scope.htmlEditorCtrl.openHelp();
                }
            });
            editor.ui.addButton('help', { label: 'Help', command: 'help', toolbar: 'help' });
        }
    });
}

然后在编辑器选项中我包含extraPlugins ='help'

只是为了在指令开始时做好准备,我添加了一些清理

for (name in CKEDITOR.instances) {
    CKEDITOR.instances[name].destroy(true);
}

以上是关于angularjs中的CKEditor自定义插件的主要内容,如果未能解决你的问题,请参考以下文章

ckeditor5 自定义插件

vSphere Web 客户端的自定义插件中的 AngularJS UI 渲染问题

ckeditor和angularjs之间的绑定数据[重复]

在 CKEditor5 中插入自定义元素

CKEditor 自定义按钮插入服务端图片

将自定义按钮添加到 django cms ckeditor