這個範例把上個範例的 jQuery UI Selectmenu 放到 vue component 內
就可以做到關注點分離 !
把訂單項目下拉選單放在這個 component 內 !
因為 component 可視為與 Domain 無關,就可以做為共用元件,因此變數命名上,就不需要有 Domain 意圖的名稱了 !
const jquery_ui_select_menu = {
template: `
<select v-bind:id="id"
v-model="modelValue">
<option value="null">請選擇</option>
<option v-for="(item, item_index) in options"
v-bind:key="item.Value"
v-bind:value="item.Value">
{{ item.Text }}
</option>
</select>
`,
props: {
id: String,
options: Array,
modelValue: String,
width: Number,
},
setup(props, {emit}) {
let dom = null;
onMounted(() => {
dom = $("#"+ props.id);
dom.selectmenu({
width: props.width,
change: function (event, ui) {
emit('update:modelValue', parseInt(ui.item.value));
}
});
})
return {
}
},
}
引用上述 component
原本 vue 指定 mount 的地方上面加上 js script 的引用
</script>
<script src="/lib/jquery-ui-select-menu.js?20210608001"></script>
<script>
app.component("jquery-ui-select-menu", jquery_ui_select_menu);
const vm = app.mount('#app');
</script>
訂單項目下拉選單就改為使用上述的 component
<td>
<jquery-ui-select-menu
v-model="item.OrderItemId"
v-bind:id="'select-menu-'+index"
v-bind:options="order_items"
v-bind:width=200
></jquery-ui-select-menu>
</td>
這篇先到這裡,下一篇來看看把 jQuery UI Selectmenu 放到 Vue Component 內 !