как загружается контент с помощью ng-switch - PullRequest
0 голосов
/ 15 января 2019

Наша команда разрабатывает приложение в ServiceNow и создала большой виджет, который встраивает пару других виджетов. Каждый встроенный виджет содержится в отдельной вкладке, и мы используем ng-switch для переключения между ними. ServiceNow имеет клиентский API, называемый recordWatch, который будет обновлять содержимое на странице без перезагрузки, если запись была добавлена ​​/ удалена в соответствующей серверной таблице. Мы столкнулись с проблемой, при которой содержимое будет обновляться только в том случае, если предварительно выбрана правильная вкладка.

Например, у нас есть вкладка «История работ». Если мы уже на вкладке «Журнал работ» и добавили новую запись в серверную часть, содержимое этой вкладки будет обновляться автоматически без перезагрузки. Однако, если мы сделаем то же самое, и откроется еще одна вкладка, то нам нужно будет перезагрузить ее, чтобы увидеть эти обновления.

Мы хотели подтвердить, что ng-switch рендерится только при нажатии на соответствующую вкладку, а не загружает все сразу и только скрывает, пока не нажата соответствующая вкладка. Если первое верно, нужно ли отказаться от ng-switch, чтобы наш recordWatch работал правильно? Есть ли другой способ, который мы можем принять, чтобы выполнить наши требования? Спасибо!

1 Ответ

0 голосов
/ 15 января 2019

есть одно большое отличие между ngHide / ngShow и ngIf / ngSwitch. ngHide фактически просто установит отображение css: none, тогда как ngIf / ngSwitch удалит HTML из DOM и прочитает его, если условие будет выполнено. https://stackoverflow.com/a/16742553/2157581

Поэтому все виджеты в неактивном ngSwitch не работают.

Вы можете довольно легко переписать свой виджет с ngSwitch на ngHide. Вы должны попробовать это в первую очередь.

Лучшей практикой будет создание службы, которая является одноэлементной и может быть импортирована во все директивы / виджеты. Этот сервис должен взять логику recordWatch и содержать модели для директив. Таким образом, если вы переключите ngSwitch на новую директиву, она будет использовать самые новые данные из работающей службы. https://fdietz.github.io/recipes-with-angular-js/controllers/sharing-code-between-controllers-using-services.html

...