接續前面按鈕的@click
監聽點擊事件後,執行的方法,繼續進行相關介紹,首先針對openCreate()
,仔細去看其中的內容,參考如下。
// src/views/Employee.vue
<script>
export default {
methods: {
openCreate() {
this.isEdit = false;
this.editingEmployee = {
name: "",
age: null,
phone: "",
identity: "FULL",
salary_type: "MONTH"
};
this.showModal = true;
},
}
};
</script>
showModal
狀態(state),可以看到當函式執行時,會將showModal
設定為true
,即代表打開或跳出互動視窗。isEdit
狀態(state),來處理即可,亦即當其為true
,代表修改模式;若為false
,則為新增模式,如此即可避免撰寫兩種內容相似的元件。editingEmployee
。這也是一個狀態(state),只是相對前兩個狀態,儲存的資料較多,由此我們也可以知道,狀態並非只能是布林邏輯值,尚有其餘資料型態可供使用。因為openCreate()
主要是為了控制互動視窗跳出與否,因此預期此三個狀態,都會在Modal元件中使用(如<EmployeeModal>
),至於使用的方式,可參考如下。
<!-- 使用狀態,進行互動視窗的控制 -->
<EmployeeModal
:modelValue="showModal"
:is-edit="isEdit"
:initial-employee="editingEmployee"
@submit="handleSubmit"
@update:modelValue="showModal = $event"
/>
冒號:
是v-bind:
的縮寫,作用是動態綁定HTML原生屬性或元件狀態,而被綁定者的值,取決於其後的字串或表達式而更新變化。若不加上冒號:
,則代表靜態綁定,所綁定的值將依初始給值而固定。
這邊所介紹的三個狀態(showModal
、isEdit
、editingEmployee
),進一步講,他們都是響應式資料(reactive data),也就是Vue會追蹤它們的內容變化,並基此狀態變化,自動更新畫面或控制其他元件的顯示與動作,這正是Vue在狀態管理方面的強大特點之一。
當然在使用響應式資料之前,必須先在組件中透過data()
函式定義這些狀態,參考如下。
// src/views/Employee.vue
<script>
export default {
// 定義響應式資料(reactive data)
data() {
return {
isEdit: false,
editingEmployee: {},
showModal: false
};
},
methods: {
// 執行openCreate()方法以更改狀態(state)
openCreate() {
this.isEdit = false;
this.editingEmployee = {
name: "",
age: null,
phone: "",
identity: "FULL",
salary_type: "MONTH"
};
this.showModal = true;
},
}
};
</script>
截至目前為止,我們所操作的,都只是前端組件內的資料初始化與狀態設定,也就是只操作組件內部狀態(local state),但是網頁功能不可能都侷限在內部狀態的管理,當面對向後端請求或跨組件的需求時,單純使用內部狀態的控制,是無法完成任務的。
所以接下來將會進一步介紹如何進行狀態管理,例如使用Vuex來統一管理應用程式中的共享資料。