Пуленепробиваемая инкапсуляция приложения / контроллера AngularJS - PullRequest
0 голосов
/ 30 апреля 2018

Я разработчик ServiceNOW. Недавно ServiceNOW заменил свою систему управления контентом на основе Jelly на сервисный портал на основе AngularJS. Этот интерфейс использует виджеты AngularJS для отображения и манипулирования данными, включая возможность создания пользовательских виджетов. Тем не менее, интерфейс исполнителя все еще основан на Jelly.

ServiceNOW имеет конструкции, называемые UI Macros и UI Scripts, которые можно использовать в интерфейсе Jelly для разработки модулей UI, для которых конструкции OOTB недоступны, как виджеты на портале служб. Я попытался создать макрос пользовательского интерфейса на основе AngularJS, который ссылается на приложение / контроллер AngularJS посредством включения сценария пользовательского интерфейса, который их содержит. Я создал зеркальный виджет для Сервисного портала, который использует, по сути, тот же AngularJS App / Controller.

Виджет прекрасно работает в сервисном портале. Макрос пользовательского интерфейса прекрасно работает в представлении каталога услуг. Однако, когда тот же макрос пользовательского интерфейса включен в запись выполнения, он больше не работает правильно. Журналы консоли показывают, что существует конфликт контроллера.

Я предполагаю, что там, где ServiceNOW вставляет мой макрос пользовательского интерфейса, находится в середине другого приложения AngularJS, для которого нет ожидания другого приложения AngularJS, только Jelly.

Поэтому мой вопрос заключается в том, есть ли способ инкапсулировать мое приложение / контроллер AngularJS таким образом, чтобы оно полностью функционировало само по себе или если оно вставлено в какой-либо другой приложение / контроллер AngularJS, т. Е. Что оно действительно пуленепробиваемое и независимо от того, что может быть вокруг него?

К вашему сведению: Результатом инцидента ServiceNOW HI по этой проблеме стало то, что в макросах пользовательского интерфейса должен быть только Jelly. Тем не менее, идея поддерживать две совершенно разные технологии для одной и той же вещи не привлекательна. Поэтому я изучаю все возможности.

Заранее спасибо.

почтение, Роберт

1 Ответ

0 голосов
/ 07 мая 2018

Одна из распространенных опций в servicenow - это использование элементов HTML, это дает вам возможность иметь отдельную страницу с отдельной областью действия и отдельным объектом окна JS (не будет конфликтовать с внутренним угловым приложением)

Вы можете инкапсулировать каждую вещь на странице пользовательского интерфейса, считать ее основным файлом приложения Angular JS и обращаться к этой странице пользовательского интерфейса, как показано ниже:

<iframe src='https://<YOUR_INSTANCE>.service-now.com/<YOUR_UI_PAGE_NAME>.do'></iframe>
...