Готовя свой последний доклад о веб-компонентах и ​​Ionic v4, я заметил, что не использовал ни один из них для создания слайдов 🤔 Вот почему на этой неделе я опубликовал DeckDeckGo, новый инструмент для создания легких презентаций с использованием HTML. и ионные компоненты 🚀

Чтобы развить то, что я узнал во время работы над этим новым домашним проектом, я подумал, что было бы, может быть, интересно написать краткую статью о том, как использовать Ionic без какого-либо фреймворка или с любым фреймворком, как вам больше нравится😉

Импорт ионного

Цель этой статьи - описать, как использовать Ionic в простом index.html, поэтому мы не будем полагаться на NPM, и мы собираемся импортировать Ionic из CDN, особенно из Unpkg. Для этого мы просто добавим следующие строки в <head/> вашей HTML-страницы:

<!-- Import the Ionic CSS -->
<link href="https://unpkg.com/@ionic/core@latest/css/ionic.bundle.css" rel="stylesheet">
<!-- Import Ionic -->
<script src="https://unpkg.com/@ionic/core@latest/dist/ionic.js"></script>
<!-- Optional, import the Ionic icons -->
<script src="https://unpkg.com/ionicons@latest/dist/ionicons.js"></script>

Вот и все, что вам нужно для импорта Ionic в любые веб-приложения 🎉

Базовое использование

Что ж, я мог бы прекратить статью здесь, это очень просто и понятно, но я подумал, что было бы неплохо показать и несколько примеров использования. В этом первом примере я просто продемонстрирую кнопку, которая должна вызывать предупреждение.

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">

    <title>Using Ionic without any framework</title>

<!-- Import the Ionic CSS -->
<link href="https://unpkg.com/@ionic/core@latest/css/ionic.bundle.css" rel="stylesheet">
<!-- Import Ionic -->
<script src="https://unpkg.com/@ionic/core@latest/dist/ionic.js"></script>
<!-- Optional, import the Ionic icons -->
<script src="https://unpkg.com/ionicons@latest/dist/ionicons.js"></script>
</head>
<body>

<!-- We create a vanilla Javascript function to call the alert -->
<script>
    hello = async function () {
        alert('Hello World!');
    };
</script>

<!-- We declare an Ionic app using the <ion-app/> element -->
<ion-app>
    <!-- Cool thing, the Ionic CSS utilities could be used too -->
    <ion-content text-center>
        <h1>Basic usage</h1>
        <!-- We add an ion-button with an onclick event -->
        <ion-button onclick="hello()">Click me</ion-button>
    </ion-content>
</ion-app>

</body>
</html>

Пример Codepen

Поскольку мы используем Ionic в index.html без какой-либо структуры, это дает возможность действительно легко создавать примеры Codepen. Вы можете проверить именно этот по следующему адресу: https://codepen.io/peterpeterparker/pen/YJLvQq

Немного более сложное использование

Предыдущий пример действительно прост, но как насчет более «сложных» компонентов, таких как создание и использование модальных окон или всплывающих окон?

Модальные окна

Честно говоря, описание того, как реализовать модальное окно, было бы просто копией документации. Поэтому, если вы хотите реализовать Ionic-модальное окно в проекте без или с фреймворками, просто посетите модальную документацию, перейдите к главе Использование, переключитесь на Javascript в примере, скопируйте / вставьте код в свой проект и вуаля, он просто будет работать из коробки 😜

Поповерс

Я обнаружил, что реализация всплывающего окна немного сложнее (в некоторых случаях это все еще очень просто 😆). Теперь мы попытаемся переместить кнопку из предыдущего примера, которая запускает предупреждение, с главной страницы во всплывающее окно.

Прежде всего, чтобы реализовать такой компонент, мы должны добавить элемент new<ion-popover-controller/> на нашу HTML-страницу. Я лично понимаю это как привязку к элементу, который мы собираемся добавить, что, кстати, и будет. добавляется в DOM только после того, как вызывается, а не раньше.

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

Наконец, как и в классическом приложении Ionic Angular, мы будем использовать PopoverController для его создания и представления.

Сложенная вместе страница index.html теперь будет выглядеть следующим образом:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">

    <title>Using Ionic without any framework</title>

    <link href="https://unpkg.com/@ionic/core@latest/css/ionic.bundle.css" rel="stylesheet" media="screen">
    <script src="https://unpkg.com/@ionic/core@latest/dist/ionic.js"></script>
    <script src="https://unpkg.com/ionicons@latest/dist/ionicons.js"></script>
</head>
<body>
<script>
    hello = async function () {
        alert('Hello World!');
    };

    // Our custom element
    class MyPopover extends HTMLElement {
        constructor() {
            super();
        }

        async connectedCallback() {

            // Here we parse the content of the popover
            this.innerHTML = '<ion-content><ion-button onclick="hello()">Click me</ion-button></ion-content>';
        }
    }

    // We define our custom element
    customElements.define('my-popover', MyPopover);

    // The function to bring the pieces together
    presentMyPopover = async function() {
        // We get the anchor
        const popoverController = document.querySelector('ion-popover-controller');

        await popoverController.componentOnReady();

        // We create the popover for our custom element
        const popover = await popoverController.create({
            component: 'my-popover',
            translucent: true
        });

        // We present the popover
        return await popover.present();
    };

</script>

<ion-app>
    <ion-content text-center>
        <h1>Popover usage</h1>
        <!-- On click we call the function to open the popover -->
        <ion-button onclick="presentMyPopover()">Open</ion-button>
    </ion-content>

    <!-- Our popover anchor -->
    <ion-popover-controller></ion-popover-controller>
</ion-app>

</body>
</html>

Codepen

Вы можете проверить второй пример по следующему адресу: https://codepen.io/peterpeterparker/pen/JmvZLo

Пользовательские элементы и совместимость с браузером

Пользовательские элементы теперь изначально поддерживаются Chrome и Safari, но пока не поддерживаются по умолчанию в Firefox ‹v63. Чтобы решить эту проблему, мы могли бы добавить полифил пользовательских элементов в заголовок нашей HTML-страницы:

<script src="https://unpkg.com/@webcomponents/custom-elements"></script>

Вишня на торте 🍒🎂

Как я уже сказал во введении, на этой неделе я опубликовал свой новый проект DeckDeckGo, в котором я использовал эти компоненты. Но то, что я пока не упомянул, это то, что этот проект бесплатный и с открытым исходным кодом 🚀 Таким образом, вы можете найти практическую реализацию всего, что я пытался отобразить выше, в моем репозитории DeckDeckGo: https://github.com/fluster / deckdeckgo

До бесконечности и дальше 🚀

Дэйвид