Ionic Modals용 웹 구성 요소 추가
17495 단어 javascriptbeginnerspodcastwebdev
모달 코드
Eric Bidelman이 작성한 것Custom Elements보다 더 많은 것을 추가할 수 있는지 모르겠습니다. 기본적으로 무엇이든 넣을 수 있다고 말하고 싶습니다. 반복할 때마다 코드를 실행해야 하는 경우
connectedCallback()
가 있는지 확인하십시오.connectedCallback: Called every time the element is inserted into the DOM. Useful for running setup code, such as fetching resources or rendering. Generally, you should try to delay work until this time.
customElements.define('modal-search', class extends HTMLElement {
constructor() {
super(); this.attachShadow({ mode: 'open' });
}
connectedCallback() {
const ionHeader = document.createElement('ion-header');
const ionToolbar = document.createElement('ion-toolbar');
const ionTitle = document.createElement('ion-title');
ionTitle.innerHTML = <ion-label color='primary'>Search Purr-fectly</ion-label>
const ionButtons = document.createElement('ion-buttons');
ionButtons.setAttribute('slot', 'primary');
const ionButton = document.createElement('ion-button');
ionButton.addEventListener('click', async () => {
const modalController = document.querySelector('ion-modal-controller'); await modalController.dismiss({ 'dismissed': true });
})
const ionIconClose = document.createElement('ion-icon'); ionIconClose.setAttribute('slot', 'icon-only');
ionIconClose.setAttribute('name', 'close'); ionButton.appendChild(ionIconClose);
ionButtons.appendChild(ionButton); ionToolbar.appendChild(ionButtons);
ionToolbar.appendChild(ionTitle); ionHeader.appendChild(ionToolbar);
const ionSearchbar = document.createElement('ion-searchbar');
const searchContent = document.createElement('ion-content');
ionSearchbar.addEventListener('ionChange', async ev => {
try { const searchResults = await index.search({ query: ev.detail.value });
const ionList = document.createElement('ion-list'); searchResults.hits.forEach(hit => {
const ionItem = document.createElement('ion-item'); ionItem.setAttribute('href', hit.url);
const ionLabel = document.createElement('ion-label');
const title = document.createElement('h2'); title.innerHTML = hit._highlightResult.title.value; ionLabel.appendChild(title);
const summary = document.createElement('p'); summary.innerHTML = hit._highlightResult.summary.value; ionLabel.appendChild(summary);
ionItem.appendChild(ionLabel); ionList.appendChild(ionItem); }); searchContent.innerHTML = ionList.innerHTML
}
catch (err) {
console.log(err); console.log(err.debugData);
}
});
this.shadowRoot.appendChild(ionHeader);
this.shadowRoot.appendChild(ionSearchbar);
this.shadowRoot.appendChild(searchContent);
}
});
클릭 이벤트 리스너
이것은 Ionic's Modal 을 활용하고 있습니다. 또한 귀하의 사이트에
<ion-modal-controller>
를 포함해야 합니다. 그렇지 않으면 작동하지 않습니다. modalController.create
에서 component: 'modal-search'
속성을 전달하고 있음을 알 수 있습니다. 위에서 생성한 커스텀 요소의 이름입니다.mainSearch.forEach(b => {
b.addEventListener('click', async (event) => {
// initialize controller
const modalController = document.querySelector('ion-modal-controller');
await modalController.componentOnReady();
// present the modal const modalElement =
await modalController.create({
animated: true,
component: 'modal-search',
componentProps: {
search: event.currentTarget.getAttribute('search')
} });
await modalElement.present();
});
});
가장 좋은 부분
이제 이것을 패키징하고 멋진 패키지로 NPM에 추가할 수 있습니다. 더 좋은 점은 다음에 Stencil 구성 요소에서 만들 수 있다는 것입니다. 어떻게 생각하는지 알려주세요!
Reference
이 문제에 관하여(Ionic Modals용 웹 구성 요소 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codingcatdev/adding-web-component-for-ionic-modals-33jh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)