Я смог сделать это, уничтожив загруженный элемент, воссоздав этот элемент и снова вызвав angular.bootstrap
с новыми обновленными модулями и компонентами.
Вот пример,
Исходный код:
<body>
<div id="app" ng-controller="MainController as $ctrl">
<dynamic-component data="$ctrl.data">
</dynamic-component>
</div>
</body>
angular.module('components', [])
.component('dynamicComponent', {
bindings: {...},
controller,
template
})
angular.module('app', ['components'])
.controller('MainController', ...)
angular.bootstrap(document.querySelector('#app'), ['app'])
И чтобы обновить dynamic-component
, сбросьте и уничтожьте загрузочный элемент.Это позволит нам снова вызвать angular.bootsrap
для этого элемента
document.body.innerHTML = `
<div id="app" ng-controller="MainController as $ctrl">
<dynamic-component data="$ctrl.data">
</dynamic-component>
</div>
`
Определить ваши модули.Здесь мы можем обновить старую dynamic-component
так, как хотим.Мы также можем добавить больше компонентов или модулей.
angular.module('components', [])
.component('newDynamicComponent', {
bindings: ...newBindings,
controller: newController,
template: newTemplate
})
angular.module('app', ['components', ...otherModules])
.controller('MainController', ...)
angular.boostrap(document.querySelector('app'), ['app'])
Работа пример
Если есть лучший способ, пожалуйста, дайте мне знать.