Я создаю несколько WebComponent
, которые буду использовать в разных библиотеках / фреймворках, но в основном с простой ванилью JavaScript
. Я подумываю об использовании для этого Angular Elements и создал образец из нескольких документов.
Он отлично работает, со всеми встроенными естественными особенностями Angular. Но я борюсь с чтением данных из веб-компонента из простого JavaScript
, что-то вроде var result = myComponent.value
.
- Обратите внимание, что эти данные, которые я читаю, не являются примитивными или однозначными. Это как объект со множеством деталей из сложного
WebComponent
- Я бы хотел что-то вроде
readonly property
- В стандартных
Angular
документах по компонентам для этой цели всегда используется@Output()
сEventEmitter
. Но поскольку я буду использовать компонент какWebComponent
внеAngular
мира, я не могу (и не хочу) использовать этот подход. Кроме того, я не хочу уведомлять о каждом изменении значения, а просто считываю значение, когда это необходимо.
Если я напишу стандартный WebComponent
простым JavaScript
, я могу сделать это
class MyComponent extends HTMLElement {
constructor() {
super();
this.name = 'Guest';
this.count = 0;
}
// more code...
// THIS result PROPERTY IS USED TO READ DATA FROM THE WEB COMPONENT
get result() {
return { name: this.name, count: this.count }; // <<== to read data
}
connectedCallback() {
this.attachShadow({ mode: 'open' });
this.shadowRoot.innerHTML = `
<style>
styles....
</style>
<h1>MyComponent</h1>
More HTML...
`;
}
}
customElements.define('my-component', MyComponent);
// Then I can use <my-component></my-component> in my application HTML
// And in the JavaScript code, I can read data from my-component as
const result = document.querySelector('my-component').result;
// which would be something like { name: 'Guest', count: 0 }
Есть ли способ сделать это в AngularElements
?
Object.defineProperty
? - person Danny '365CSI' Engelman   schedule 16.06.2020Object.defineProperty()
поможет в этом сценарии? - person Arghya C   schedule 16.06.2020result
в вашем ванильном коде выше. - person Danny '365CSI' Engelman   schedule 16.06.2020