如何使用ng-repeat获取ckeditor的实例?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用ng-repeat获取ckeditor的实例?相关的知识,希望对你有一定的参考价值。

我正在尝试使用带有angularjs的ckeditor我已添加了相同的指令。它工作正常。问题是当我尝试获取ckeditor的实例列表时。

//指令

app.directive('ckeditor', function () {
     return {
        require: '?ngModel',
        link: function (scope, element, attr, ngModel) {
            var ck = CKEDITOR.replace(element[0]);
            if(!ngModel)return;
            ck.on('pasteState', function () {
                scope.$apply(function () {
                    ngModel.$setViewValue(ck.getData());
                });
            });
            ngModel.$render = function (value) {
                ck.setData(ngModel.$viewValue);
            };
        }
    };
});

// ng-repeat

<div ng-repeat="key in []| range:0:(vm.listCount-1)"> 
     <textarea ckeditor id="content_{{key + 1}}"
               ng-model="vm.contentList[key].content">
     </textarea>
</div>

在控制器中我试图获取实例列表。而不是content_0,content_1等。我只获得内容_ {{key + 1}}一个实例

console.log(CKEDITOR.instances);

我想获得ckeditor的正确实例,但我只得到一个内容为_ {{key + 1}}的值。请有人建议。

答案

我的猜测是指令需要在调用id之前设置CKEDITOR.replace属性:

app.directive('ckeditor', function () {
     return {
        require: '?ngModel',
        link: function (scope, element, attr, ngModel) {
            //COMPUTE id attribute
            if (attr.key) {
                var keyValue = scope.$eval(attr.key);
                element[0].id += "_"+keyValue;
            };
            var ck = CKEDITOR.replace(element[0]);
            if(!ngModel)return;
            ck.on('pasteState', function () {
                scope.$apply(function () {
                    ngModel.$setViewValue(ck.getData());
                });
            });
            ngModel.$render = function (value) {
                ck.setData(ngModel.$viewValue);
            };
        }
    };
});

用法:

<div ng-repeat="key in [0,1]"> 
     <textarea ckeditor key="$index+1" id="content"
               ng-model="vm.contentList[key].content">
     </textarea>
</div>

在AngularJS框架计算id="content_{{key + 1}}"之前,CKEDITOR可能会实例化编辑器。

以上是关于如何使用ng-repeat获取ckeditor的实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 mysql 获取数据到 ckeditor textarea?

angular 如何获取使用filter过滤后的ng-repeat的数据长度

如何从其他`ng-repeat`元素获取`data`到当前元素指令

angular.js > 如何在视图中获取内部 JSON 数据(使用 ng-repeat 指令)

如何从CKEditor 5实例获取数据

从 CKEditor 获取格式化的 HTML