Как получить экземпляры ckeditor с помощью ng-repeat? - PullRequest
1 голос
/ 19 апреля 2019

Я пытаюсь использовать ckeditor с angularjs. Я добавил директиву для того же самого.Работает нормально.Проблема в том, что я пытаюсь получить список экземпляров 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>

В контроллере IЯ пытаюсь получить список экземпляров.Там вместо content_0, content_1 и т. Д. Я получаю контент _ {{key + 1}} только один экземпляр

console.log(CKEDITOR.instances);

Я хочу получить правильный экземпляр ckeditor, но я получаю только одно значение, котороеcontent _ {{key + 1}} Пожалуйста, кто-нибудь посоветует.

1 Ответ

1 голос
/ 19 апреля 2019

Я предполагаю, что директива должна установить атрибут 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>

CKEDITOR, вероятно, создает экземпляр редакторадо того, как среда AngularJS вычислит id="content_{{key + 1}}".

...