Vue Composition API using ES module
網站沒有做前後端分離,但想要用 Vue,而且還要用 Composition API,可以使用下面的方式:
// 引用的時候記得要加上 type="module"
// <script src="demo.js" type="module"></script>
// 開發的時候可以把 vue.esm-browser.prod.js 的 .prod 去掉,方便用 Vue.js devtools 除錯
import {
createApp,
ref,
computed,
watch,
nextTick,
onMounted,
} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.prod.js';
// 引入 component
import SelectComponent from './select-component.js';
const vueApp = createApp({
components: {
SelectComponent,
},
setup() {
...
return { ... }
}
});
vueApp.mount('#app');
// select-component.js
import { ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.prod.js';
export default {
name: 'SelectComponent',
props: ['modelValue', 'getPageNumber', 'itemsPerPage'],
emits: ['update:modelValue'],
template: `
<select
class="form-select"
v-model="page"
@change="$emit('update:modelValue', $event.target.value)"
>
<option
:value="n"
v-for="n in getPageNumber"
>
Episode {{ (n * itemsPerPage) - itemsPerPage + 1 }} ~ Episode {{ n * itemsPerPage }}
</option>
</select>
`,
setup(props) {
const page = ref(props.modelValue);
return { page };
},
};
// 在 html 使用 component
// tag 使用 <select-component></select-component>
<select-component
v-model="page"
:get-page-number="getPageNumber"
:items-per-page="ITEMS_PER_PAGE"
></select-component>