Tag: Vue3

  • Vue – 運行ES Module,import與export

    Vue – 運行ES Module,import與export

    Node.js require、module以及exports 模組設定 – Hugo Habor


    1. Module(模組)

    JS- Module 1內容

    export1.js

    const component = {
    data: [ // 資料
    '這是第一句話',
    '這是第二句話',
    '這是第三句話'
    ],
    removeData(id) {
    this.data.splice(id, 1);
    this.render();
    },
    render() { // 渲染方法
    const list = document.querySelector('.component ul');
    let content = '';
    this.data.forEach((item, i) => {
    content = `${content}<li>${item} <button type="button" class="btn" data-id="${i}">移除</button></li>`
    });
    // 縮寫優化
    // const content = component.data.map(item => `<li>${item}</li>`).join('');
    list.innerHTML = content;

    // 加入監聽
    const btns = document.querySelectorAll('.btn');
    btns.forEach(btn => btn.addEventListener('click', (e)=> {


    const id = e.target.dataset.id;
    this.removeData(id)
    }))
    },
    init() {
    this.render();
    }
    }
    component.init();

    匯出JS- Module 內容,進入HTML

    esModule.html

    <!DOCTYPE html><html><head><title>ES 模組</title><meta name="viewport" content="width=device-width, initial-scale=1"><link href="images/favicon.ico" rel="shortcut icon"><meta charset="UTF-8"><script src="/javascripts/vendor.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.js"></script></head><body class="bg-lighter">
    <div class="container main my-5"><div class="row"><main class="col post">
    <!-- Vue標題 --><div class="mb-4"><h1 class="mt-0 text-muted">ES 模組</h1><small>檔名:<code>esModule.html</code></small></div>

    <div class="component">
    <ul></ul>
    </div>

    <script type="module">


    import NewComponent from './export1.js';

    NewComponent .init();

    </script>

    </main>

    <aside
    class="col-md-3"><div class="sticky-top" style="top: 76px">
    <div class="list-group">

    <a href="/es6/shorthand.html"
    class="list-group-item list-group-item-action

    ">
    縮寫
    </a>

    <a href="/es6/this.html"
    class="list-group-item list-group-item-action

    ">
    this 的運作
    </a>

    <a href="/es6/arrow_function.html"
    class="list-group-item list-group-item-action

    ">
    箭頭函式
    </a>

    <a href="/es6/separation_of_concerns.html"
    class="list-group-item list-group-item-action

    ">
    關注點分離
    </a>

    <a href="/es6/separation_of_concerns_work.html"
    class="list-group-item list-group-item-action

    ">
    關注點分離 練習題
    </a>

    <a href="/es6/object_reference.html"
    class="list-group-item list-group-item-action

    ">
    物件參考特性
    </a>

    <a href="/es6/promise.html"
    class="list-group-item list-group-item-action

    ">
    Promise
    </a>

    <a href="/es6/esModule.html"
    class="list-group-item list-group-item-action

    active">
    ES Module
    </a>

    <a href="/es6/esModule_2.html"
    class="list-group-item list-group-item-action

    ">
    ES 模組延伸觀念
    </a>

    </div>
    <div class="mt-3 text-end p-2 bg-light rounded">
    <small class="text-black-50 fw-light mb-0">文件版本:2022/11/1</small>
    </div>
    </div>

    </aside>

    </div>
    </div>

    <nav class="navbar fixed-top navbar-expand-sm navbar-dark bg-secondary">
    <div class="container-fluid">
    <a class="navbar-brand" href="/">Vue 3 練習手冊</a>
    <div class="collapse navbar-collapse" id="navbarCollapse">
    <ul class="navbar-nav">
    <li class="nav-item active">
    <a class="nav-link active" href="/es6/shorthand.html">JS 必備觀念</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/intro/createApp.html">認識 Vue.js</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/template/v-text.html">模板</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/optionsApi/options-methods.html">方法</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/components/component_register.html">元件</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/advApi/adv-refs.html">進階</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/router/vue-router.html">路由</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/composition/proxy.html">Composition API</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/pinia/layout.html">Pinia</a>
    </li>
    </ul>
    </div>
    </div>
    </nav>

    <footer class="footer py-2 bg-light">
    <div class="container text-center">
    <small class="text-black-50 fw-light mb-0">六角學院 Vue 課程專屬文件</small>
    </div>
    </footer>
    <link rel="stylesheet" href="/stylesheets/all.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
    </body>
    </html>


    JS- Module 2內容

    <!DOCTYPE html><html><head><title>ES 模組</title><meta name="viewport" content="width=device-width, initial-scale=1"><link href="images/favicon.ico" rel="shortcut icon"><meta charset="UTF-8"><script src="/javascripts/vendor.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.js"></script></head><body class="bg-lighter">
    <div class="container main my-5"><div class="row"><main class="col post">

    <!-- 章節標題 --><div class="mb-4"><h1 class="mt-0 text-muted">ES 模組</h1><small>檔名:<code>esModule.html</code></small></div>

    <div class="component">
    <ul></ul>
    </div>

    // 在script 區域內,匯入 module

    <script type="module">


    import NewComponent from './export1.js';
    NewComponent .init();



    // #2-2 具名匯入
    // 單一匯入(建議寫法)

    import {} from './export2.js';


    </script>

    </main>

    <aside
    class="col-md-3"><div class="sticky-top" style="top: 76px">
    <div class="list-group">

    <a href="/es6/shorthand.html"
    class="list-group-item list-group-item-action

    ">
    縮寫
    </a>

    <a href="/es6/this.html"
    class="list-group-item list-group-item-action

    ">
    this 的運作
    </a>

    <a href="/es6/arrow_function.html"
    class="list-group-item list-group-item-action

    ">
    箭頭函式
    </a>

    <a href="/es6/separation_of_concerns.html"
    class="list-group-item list-group-item-action

    ">
    關注點分離
    </a>

    <a href="/es6/separation_of_concerns_work.html"
    class="list-group-item list-group-item-action

    ">
    關注點分離 練習題
    </a>

    <a href="/es6/object_reference.html"
    class="list-group-item list-group-item-action

    ">
    物件參考特性
    </a>

    <a href="/es6/promise.html"
    class="list-group-item list-group-item-action

    ">
    Promise
    </a>

    <a href="/es6/esModule.html"
    class="list-group-item list-group-item-action

    active">
    ES Module
    </a>

    <a href="/es6/esModule_2.html"
    class="list-group-item list-group-item-action

    ">
    ES 模組延伸觀念
    </a>

    </div>
    <div class="mt-3 text-end p-2 bg-light rounded">
    <small class="text-black-50 fw-light mb-0">文件版本:2022/11/1</small>
    </div>
    </div>

    </aside>

    </div>
    </div>

    <nav class="navbar fixed-top navbar-expand-sm navbar-dark bg-secondary">
    <div class="container-fluid">
    <a class="navbar-brand" href="/">Vue 3 練習手冊</a>
    <div class="collapse navbar-collapse" id="navbarCollapse">
    <ul class="navbar-nav">
    <li class="nav-item active">
    <a class="nav-link active" href="/es6/shorthand.html">JS 必備觀念</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/intro/createApp.html">認識 Vue.js</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/template/v-text.html">模板</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/optionsApi/options-methods.html">方法</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/components/component_register.html">元件</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/advApi/adv-refs.html">進階</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/router/vue-router.html">路由</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/composition/proxy.html">Composition API</a>
    </li>
    <li class="nav-item">
    <a class="nav-link " href="/pinia/layout.html">Pinia</a>
    </li>
    </ul>
    </div>
    </div>
    </nav>

    <footer class="footer py-2 bg-light">
    <div class="container text-center">
    <small class="text-black-50 fw-light mb-0">六角學院 Vue 課程專屬文件</small>
    </div>
    </footer>
    <link rel="stylesheet" href="/stylesheets/all.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css">
    </body>
    </html>

    HTML-Script 匯入其他Module

    引用export2.js 模組內部的函式

    函式內部可以裝載任何演算式。