Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Динамическое копирование контроллера (https://javascript.ru/forum/angular/48406-dinamicheskoe-kopirovanie-kontrollera.html)

tayrin 02.07.2014 15:32

Динамическое копирование контроллера
 
Есть приложение, визуальный редактор на CKEditor.
К кнопкам, привязал функции, которые я описал в контроллере.
При клике, нужно вставить еще одно окно с тем же функционалом.
Нужно чтобы для каждого созданного окна эти функции работали. Как я понимаю нужно более универсальный контроллер делать, или другим способом.
Буду рад прочитать умные мысли от тех кто достаточно хорошо знаком с ангуляром

FireVolkhov 03.07.2014 08:04

Добавь на страницу ngRepeat массива с объектами редакторов, по кнопке добавляй новый объект в массива.
Пример
CKEditor + AngularJS
Как интегрировать ckEditor в AngularJS

tayrin 08.07.2014 12:13

Спасибо за ответ.

Я так понимаю при копировании объекта редактора, все айдишники также будут меняться.
Пока что нашел решение, при клике заново комплить редактор. Но получается много косяков, потому что кнопки на последующих редакторах работают только к первому окну, в итого много чего в ручную исправлять и писать нужно.

redactor.controller('myCKEditor', function ($scope,$compile) {
$scope.createRedactorPage = function() {
idCnt++;
var redactorPage = $("#bd-wrapper").closest('tbody').clone();
redactorPage.find("#bd-wrapper").attr('id', 'bd-wrapper' + idCnt);
$("#module-pages tbody").after( $compile(redactorPage) ($scope) );
}
});

В любом случае попробую еще по вашему примеру сделать. Опишу что получилось

tayrin 13.07.2014 21:48

Все таки решил заново компилировать контент, так как редактор написан в ручную, и нету объекта которой бы его создавал.
Решил проблему следующим образом.
Сначала клонирую элемент, при его вставке в дом, инкрементирую все важные айдишники, не важные поменял на классы.
Также в редакторе есть канвас, использую библиотеку fabric.js, при вставке новой страницы я также создаю новый канвас объект и пушу его в масив, куда собираются все его объекты, потом при клике отлавливаю секцию в которой у меня дата с инкрементным индексом, по етому индексу я указываю ключ в масиве где лежит нужная мне канва.


Часовой пояс GMT +3, время: 07:32.