Доступ к реквизитам и функциям приложения Angular из внешних неугловых плагинов
У меня есть Angular SPA, но я использую неангулярную библиотеку (точнее, Medium Editor [ME]). Я создал директиву для меня, так что если я добавлю contenteditable
Элемент на мои взгляды, ME получает экземпляр и работает должным образом. Так что это не проблема.
Проблема в том, что я также создал специальное расширение ME, которое требует, чтобы веб-запросы отправлялись на мой сервер для вставки правильной разметки в редактируемый элемент ME. Но чтобы сделать эти запросы, нужны данные модели представления, а также передать их обратно:
- это должно прочитать и установить (когда не определено) мой идентификатор модели представления
- ему нужно постоянно манипулировать каким-либо другим значением модели представления, чтобы мой SPA знал, что он все еще обрабатывает, поэтому другие процессы откладываются
Я думал, что я просто включу input type="hidden" ng-model="..."
на моей странице и изменить его значение и вызвать событие ввода, чтобы Angular обновил свою модель. Скрытый ввод, конечно, не работает. Я изменил это на input type="text" class="hidden"
и сохранить функциональность.
Это действительно работает, но, похоже, это не совсем правильный способ сделать что-то хакерское. И это в основном работает для обмена значениями модели (получить / установить). Как насчет того, чтобы мне пришлось вызывать какую-нибудь функцию контроллера? Это даже отдаленно возможно?
Я не хочу, чтобы расширение ME каким-либо образом полагалось на библиотеку Angular, поскольку оно должно быть чисто расширением ME и должно использоваться повторно в неангулярных SPA (возможно, в каком-либо другом SPA SPA или просто в простом веб-приложении DHTML). Но я хотел бы сделать его пригодным для использования в SPA, а ME можно легко использовать для манипулирования разметкой некоторых элементов, которую можно настроить для просмотра модели через директиву.
Как правильно общаться с приложением Angular от внешних библиотек, которые не являются родными для Angular?
Дополнительная информация
По сути, я хочу иметь 4 функции в моем собственном расширении, которые должны каким-то образом получать доступ (и манипулировать) к моей модели углового обзора:
getReferenceId()
а такжеsetReferenceId(id)
incrementPending()
а такжеdecrementPending()
Мой Angular SPA может обнародовать ожидающий счетчик и получить к нему доступ, поэтому он не будет обрабатывать данные, пока расширение все еще работает самостоятельно. Но SPA не имеет никаких полномочий относительно того, когда устанавливать ссылочный идентификатор, чтобы он правильно читался расширением...
1 ответ
Обычно это решается путем обертывания внешних плагинов (или их частей) в службы и директивы ng. Вам не нужен входной тег, просто поместите данные в область видимости и после перехода из не-ng кода вызов $scope.$digest
, Если вам нужно следить за изменением данных, чтобы вызвать что-то во внешней библиотеке, вы можете использовать либо ng-change
или же $scope.$watch
,