iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
Modern Web

從零打造網頁系統:非資訊人也能完成的全端專題實作系列 第 17

Day 17: Vue資料流與狀態管理-前端組件內的資料初始化及狀態設定

  • 分享至 

  • xImage
  •  

接續前面按鈕的@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>
  • 其方法功能乃在點擊後,要跳出互動視窗(modal),以供網頁使用者填寫員工資料。
  • 因此預期會有一個邏輯狀態控制,用來決定是否要跳出互動視窗(即控制ON及OFF),在此函式中即為showModal狀態(state),可以看到當函式執行時,會將showModal設定為true,即代表打開或跳出互動視窗。
  • 再者,除了新增員工外,尚有可能只想針對既有的員工清單進行修改,這兩種編輯模式的差異,所要處理的資料並沒有不同,因此不必要為此區分出兩個各別的Modal元件,只要以一個邏輯狀態控制,即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原生屬性或元件狀態,而被綁定者的值,取決於其後的字串或表達式而更新變化。若不加上冒號:,則代表靜態綁定,所綁定的值將依初始給值而固定。

這邊所介紹的三個狀態(showModalisEditeditingEmployee),進一步講,他們都是響應式資料(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來統一管理應用程式中的共享資料。


上一篇
Day 16: Vue按鈕樣式及監聽事件
下一篇
Day 18: Vue資料流與狀態管理-Vuex資料流及集中狀態管理
系列文
從零打造網頁系統:非資訊人也能完成的全端專題實作20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言