это указывает на панель инструментов редактора перьев

Я использую Quilljs в качестве текстового поля на моем веб-сайте. Стандартный редактор не поддерживает загрузку изображений на сервер, поэтому мне нужно реализовать собственный обработчик. В документации написано следующее:

Функции-обработчики будут привязаны к панели инструментов (так что использование this будет относиться к экземпляру панели инструментов) и передать атрибут value ввода, если соответствующий формат неактивен, и false в противном случае.

На самом деле это проблема для меня, и я не знаю, как ее решить чистым и "правильным" способом. Я создал приложение angular и написал собственный обработчик для загрузки изображений. Этот пользовательский обработчик изображений должен загружать изображение с помощью службы angular на сервер. Служба данных глобально предоставляется в приложении и является членом моего компонента, и я могу получить к ней доступ с помощью this.dataService. Но после щелчка по значку загрузки изображения на панели инструментов this привязан к панели инструментов, я больше не могу получить доступ к своей службе данных. Могу ли я избежать этой границы на панели инструментов?

В явном виде. Предположим, я создал редактор перьев со следующим кодом:

this.editor = new Quill('#editor', {
      modules: { toolbar: "#toolbar"},
      placeholder: 'Some Placeholder',
      theme: 'snow'
});

Теперь я добавляю пользовательский обработчик к значку изображения с помощью

this.editor.getModule("toolbar").addHandler("image", imageHandler);

и моя функция-обработчик, например:

imageHandler(event) {
  this.dataService.addImage(event.file);
}

который использует dataService, который я уже реализовал и протестировал. Но this.dataService не существует, потому что this теперь привязан к панели инструментов. Я инициализировал службу с помощью конструктора компонента.

constructor(private dataService: DataService) {

}

Когда я вызываю this.dataService в конструкторе, его можно найти, и граница в порядке, но мне нужно вызвать ее в моей функции обработчика изображений, чтобы отправить файл на сервер.

С уважением, Свен


person Sven    schedule 08.11.2017    source источник


Ответы (1)


Самый простой способ решить эту проблему - поменять

this.editor.getModule("toolbar").addHandler("image", imageHandler);

в

this.editor.getModule("toolbar").addHandler("image", imageHandler.bind(this));

теперь вы можете получить доступ к переменным / членам ваших компонентов в функции обработчика изображений. Панель инструментов больше не в фокусе.

person Sven    schedule 26.11.2017