iT邦幫忙

0

Vue3 Component問題

  • 分享至 

  • xImage

各位大大好,小弟最近剛從vue2轉vue3
目前負責的案子上司要求使用cdn的方式引入Vue3就好
目前在Component遇到一點問題
因為之前都是用CLI的方式寫 在引入Component時都沒問題
但用CDN的方式突然就不知道該怎麼拆開後引入了

https://codepen.io/lai777/pen/JjErQyq?editors=1010

這是我希望能拆開的部分

有試過把它拆開到test.js

export default {
    name: 'app',

    setup() {
        const { reactive, ref } = Vue;
        /*Menu*/
        const menuSelected = ref('1')
        const menuList = ref([
            {
                id: 1,
                name: "測試01"
            },
            {
                id: 2,
                name: "測試02"
            },
            {
                id: 3,
                name: "測試03"
            },
            {
                id: 4,
                name: "測試04"
            },
            {
                id: 5,
                name: "測試05"
            },
            {
                id: 6,
                name: "測試06"
            }
        ]);
        return {
            menuList,
            menuSelected,
        }
    },



    components: {
        'my-component': {
            template: `
                <header>
                    <div>
                        <div class="menu">
                            <img class="logo" src="../image/logo.jpg" />
                            <div class="menuSearch">
                                <input type="text" placeholder="輸入關鍵字" />
                            </div>
                            <div class="menuButton">
                                <span></span>
                                <span></span>
                                <span></span>
                            </div>
                        </div>
                        <div class="menuSelect">
                            <ul>
                                <li class="menuSelectBotton"
                                    v-for="item in menuList"
                                    v-on:click="menuSelected = item.id"
                                    v-bind:class="{ activ: menuSelected == item.id}"
                                    :key="item.id">{{item.name}}</li>
                            </ul>
                        </div>
                    </div>
                </header>
            `,
        }
    }
};

然後在index.html引入

    <script type="module">
        import myComponent from '../../js/test.js'

        const App = {
            components: { myComponent },
            setup() {
                return {
                    myComponent,
                }
            }
        };

        Vue.createApp(App).mount("#app");
    </script>

畫面沒有出來

但如果改成這樣引入

    <script type="module">
        import app from '../../js/test.js'
        const { createApp } = Vue;
        createApp(app).mount('#app');
    </script>

畫面有出來,但是test.js裡面的template的v-for讀不到menuList,導致li印不出來

不知哪邊寫錯還請各位大大幫忙

另外想請問

const App = {
            setup() {
                return {
                    }
            }
        };

Vue.createApp(App).mount("#app");

/***********************************/

import app from '../../js/test.js'
const { createApp } = Vue;
createApp(app).mount('#app');

這兩種方法差別在哪呢?我看的課程是教上面那種用法,但我後來查的教學有些是用下面那種方法..看得我有點亂

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
listennn08
iT邦高手 5 級 ‧ 2021-04-08 21:49:51
最佳解答

有看過 Vue3 範例怎麼寫的嗎?

/* test.js */
import { ref, reactive } from Vue;

export default {
  name: 'App',
  
  setup() {
      // ...
  },
    
  template: `{template}`,
};
<!-- index.html -->

<div id="app">
  <my-component />
</div>

<script type="module">
  import { createApp } from Vue;
  import MyComponent from '../js/test.js';

  const App = createApp({
    components: {
      MyComponent,
    }
  });
    
  App
    // .component('my-component', MyComponent) //全域註冊
    .mount('#app');
</script>

另外你說的,其實是一樣的東西,
是 JavaScript ES6 的用法

  const { createApp } = Vue; // 可以去 google 解構賦值
  Vue.createApp();

如果還是看不懂,就直接看 demo

onyoe1120 iT邦新手 5 級 ‧ 2021-04-09 10:58:29 檢舉

感謝您,經過您的解說已經大概搞懂了~~
非常謝謝 卡了一天

我要發表回答

立即登入回答