Как использовать произвольный виджет в Angular-приложении?
Добрый день.
Имеется пользовательская база виджетов, которые используются на сайте другими пользователями и подгружаются в интерфейс аяксом по мере необходимости. Виджеты представляют собой куски HTML-кода с jQuery или чистым javascript.
Можно как-то подружить такой функционал с тем, что весь остальной интерфейс сайта будет написан с помощью Angular.
Как я понимаю из того что поначитался про Angular, подобные вещи должны быть обернуты в директивы. Но произвольный пользовательский виджет не обернешь же.
Вы правы, пользовательские директивы должны быть обернуты в директивы ангуляра. Если изменить их не получится, могу предложить использовать сервис $compile (https://docs.angularjs.org/api/ng/service/$compile) для обертки.
Но если предполагается, что модели внутри виджета будут взаимодействовать с Angular-приложением, то без правки кода не получится.
Спасибо, доктор, прописали то, что надо!
Даже нашел как выполнять произвольный JS-код в полученных с сервера строках. Так что можно даже jQuery использовать в виджетах.
maximw: на здоровье, только имейте в виду, что такие приемы надо использовать очень аккуратно:
1) Это небезопасно.
2) Тяжело дебажить и отлавливать ошибки.
3) Вы будете использовать два немаленьких фреймворка, что увеличит время на поддержку данного решения и правку багов.
Если Ваше конечное решение AngularJS, рекомендую все же переписать ваши виджеты на чистый ангуляр, без использования JQuery (или используя обертки над плагинами, тысячи их и не только ngmodules.org).
DigitalSmile: Я понимаю, что небезопасно. И с дебагом будут проблемы. Но после того, как начал делать интерфейс на jQuery + Bootstrap Widgets, понял что нужно искать другой инструмент, что зашьюсь в этой "лапше". Не вдаваясь в подробности, виджеты в общем случае могут писаться пользователями, как модули к общему интерфейсу, поэтому переписать их на Angular не получится, по крайней мере пока не придумал как это решить в автоматическом или полуавтоматическом режиме. За ссылку спасибо!
Спасибо, но мне бы пока с angular.js разобраться. Решил остановиться именно на этом фреймворке исходя из его популярности. Холиварные статьи Foo.Js VS Bar.Js, к сожалению, не дают конструктива при выборе фреймворка для тех, кто начинает с этим разбираться.
maximw: Фреймворк хоть и "популярен", но крайне не продуманный. В больших проектах не используется. И уже разрабатывают 2 версию в связи с косяками первой. Google так вообще переключил своё внимание на Polymer