国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析)

這篇具有很好參考價(jià)值的文章主要介紹了用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一.準(zhǔn)備工作

二.編寫各個(gè)組件的頁面結(jié)構(gòu)

三.實(shí)現(xiàn)初始任務(wù)列表的渲染

四.新增任務(wù)

五.刪除任務(wù)

六.展示未完成條數(shù)

七.切換狀態(tài)-篩選數(shù)據(jù)

八.待辦事項(xiàng)(全)代碼


一.準(zhǔn)備工作

在開發(fā)“ToDoList”案例之前,需要先完成一些準(zhǔn)備工作,包括創(chuàng)建項(xiàng)目、引入 BootStrap 樣式文件和搭建基本項(xiàng)目結(jié)構(gòu),下面分別進(jìn)行實(shí)現(xiàn)。

(1)創(chuàng)建項(xiàng)目 創(chuàng)建項(xiàng)目包含新建項(xiàng)目、安裝依賴項(xiàng)和運(yùn)行項(xiàng)目,具體步驟如下。

① 創(chuàng)建項(xiàng)目。使用HbuliderX軟件創(chuàng)建todolist項(xiàng)目 在src的目錄下創(chuàng)建style.css 文件中的樣式,具體代碼如下。

style.css樣式如下:

:root {
 
font-size: 16px;
 }
 body {
 
 margin: 0;
 }

② 新建并封裝組件。在D:\vue\chapter03\todolist\src\components 目錄下新建文件 ToDoHeader.vue、ToDoMain.vue 和 ToDoFooter.vue,分別表示 ToDoHeader、ToDoMain 和ToDoFooter 組件。

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③?各個(gè)組件中的<style>節(jié)點(diǎn)的樣式代碼。

二.編寫各個(gè)組件的頁面結(jié)構(gòu)

準(zhǔn)備工作完成之后,接下來編寫各個(gè)組件的頁面結(jié)構(gòu),實(shí)現(xiàn)“ToDoList”案例靜態(tài)頁 面的渲染,具體步驟如下。

①在App組件中以局部注冊的方式引入ToDoHeader、ToDoMain、ToDoFooter組 件

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

?②在ToDoHeader組件中編寫輸入?yún)^(qū)域的頁面結(jié)構(gòu)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③ 在ToDoMain組件中編寫列表區(qū)域的頁面結(jié)構(gòu)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

④ 在ToDoFooter組件中編寫切換狀態(tài)區(qū)域的頁面結(jié)構(gòu)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

三.實(shí)現(xiàn)初始任務(wù)列表的渲染

App 組件為根組件,數(shù)據(jù)在App組件中,現(xiàn)在需要將App根組件中的初始數(shù)據(jù)傳遞 到列表區(qū)域,ToDoMain組件中。即通過props(自定義屬性)從父組件(App組件)向 子組件(ToDoMain組件)中傳遞數(shù)據(jù)。實(shí)現(xiàn)初始任務(wù)列表具體步驟如下。

① 在ToDoMain組件中定義可以從父組件中接收的數(shù)據(jù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

② 在App組件中定義頁面的初始數(shù)據(jù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③ 通過自定義屬性進(jìn)行傳遞數(shù)據(jù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

④ 修改ToDoMain組件中的代碼,將接收到的list數(shù)據(jù)進(jìn)行展示。

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

四.新增任務(wù)

“ToDoList”案例中在文本框中輸入內(nèi)容,按下回車后添加任務(wù)到任務(wù)列表,將用戶 輸入的任務(wù)名稱通過自定義事件從ToDoHeader組件傳遞到App組件,具體步驟如下代碼省略。、

① 修改ToDoHeader組件中的代碼,添加頁面的初始數(shù)據(jù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

② 獲取input輸入框的值,修改ToDoHeader組件中的代碼

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③ 修改ToDoHeader組件中的代碼,為input輸入框綁定回車事件,事件處理函數(shù) 名稱為enterName

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

④ 修改ToDoHeader組件中的代碼,通過調(diào)用defineEmits()方法來聲明自定義事 件

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑤ 在ToDoHeader組件中添加enterName()方法,通過調(diào)用emit()方法觸發(fā)自定義事 件

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑥ 在App組件中監(jiān)聽addTodo自定義事件,當(dāng)enterName事件觸發(fā)時(shí),調(diào)用 addToDo()方法

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑦ 添加addToDo方法,實(shí)現(xiàn)數(shù)據(jù)的處理

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

五.刪除任務(wù)

當(dāng)鼠標(biāo)指針滑到任務(wù)列表中每一項(xiàng)時(shí),在右側(cè)會(huì)出現(xiàn)“×”圖標(biāo),單擊該圖標(biāo)即可 進(jìn)行刪除當(dāng)條任務(wù)操作。首先在ToDoMain組件中聲明并觸發(fā)自定義事件,傳遞參數(shù) 6 id,接著在App組件中監(jiān)聽自定義事件,當(dāng)自定義事件被觸發(fā)時(shí),執(zhí)行對應(yīng)的方法,進(jìn) 行刪除操作,刪除任務(wù)的具體實(shí)現(xiàn)步驟如下。

① 在ToDoMain組件中,聲明自定義事件delTodo,用于表示刪除任務(wù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

② 在ToDoMain組件中定義delToDo()方法,觸發(fā)自定義事件

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③ 修改刪除按鈕的代碼,添加點(diǎn)擊事件,傳入需要?jiǎng)h除的id

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

④ 在App組件中監(jiān)聽

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑤ 在App組件中添加delToDo方法,進(jìn)行列表中對應(yīng)任務(wù)的刪除操作

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

六.展示未完成條數(shù)

在任務(wù)狀態(tài)區(qū)域的左側(cè)會(huì)顯示未完成任務(wù)的條數(shù),接下來計(jì)算未完成任務(wù)的條數(shù)并 將其在頁面中渲染出來,具體步驟如下代碼省略。

① 在App組件中定義計(jì)算屬性,計(jì)算未完成的任務(wù)條數(shù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

?② 將自定義屬性傳給ToDoFooter組件

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③ 在ToDoFooter組件中接收lastLength

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

④ 在ToDoFooter組件中將條數(shù)展示出來

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

七.切換狀態(tài)-篩選數(shù)據(jù)

單擊切換狀態(tài)區(qū)域時(shí),默認(rèn)狀態(tài)為all,即顯示全部任務(wù),當(dāng)狀態(tài)切換為active時(shí), 顯示未完成的任務(wù),當(dāng)狀態(tài)切換為completed時(shí),顯示已完成的任務(wù),實(shí)現(xiàn)切換數(shù)據(jù)篩選 狀態(tài)具體步驟如下代碼省略。

① 首先在App組件中定義頁面的使用一個(gè)任務(wù)狀態(tài)狀態(tài)屬性status

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

② 在App組件中通過不同的status展示不同的任務(wù),實(shí)現(xiàn)任務(wù)數(shù)據(jù)的切換

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

③ 修改App組件,將showList傳遞給ToDoMain組件

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

④ 設(shè)置自定義事件名稱

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑤ 在ToDoFooter組件中定義props屬性,表示從父組件中接收該數(shù)據(jù)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑥ 在App組件中定義props,即從App組件中傳遞status到ToDoFooter組件中

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑦ 在ToDoFooter組件中單擊鏈接按鈕時(shí)更改狀態(tài)

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑧ 在App組件中監(jiān)聽updateStatus自定義事件,通過自定義事件將status屬性的值 從ToDoFooter組件傳遞到App組件中,具體代碼如下

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

⑨ 定義updateStatus()方法,用來更新狀態(tài),具體代碼如下。

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

八.待辦事項(xiàng)(全)代碼

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

ToDoFooter.vue代碼:

<template>
	<div class="footer">
		<span class="todo-count">共<strong>{{ lastLength }}</strong>條未完成任務(wù) </span>
		<ul class="filters">
		
			<ul class="filters">
				<li>
					<a @click.prevent="emit('updateStatus', 'all')" :class="{ selected: status === 'all' }"
						href="#/">All</a>
				</li>
				<li>
					<a @click.prevent="emit('updateStatus', 'active')" :class="{ selected: status === 'active' }"
						href="#/active">Active</a>
				</li>
				<li>
					<a @click.prevent="emit('updateStatus', 'completed')" :class="{ selected: status === 'completed' }"
						href="#/completed">Completed</a>
				</li>
			</ul>
		</ul>
	</div>
</template>

<script setup>
	const props = defineProps(['lastLength', 'status'])
	const emit = defineEmits(['updateStatus'])
</script>

<style>
	.footer {
		padding: 10px 15px;
		height: 20px;
		text-align: center;
		font-size: 15px;
		border-top: 1px solid #e6e6e6;
	}

	.footer:before {
		content: "";
		position: absolute;
		right: 0;
		bottom: 0;
		left: 0;
		height: 50px;
		overflow: hidden;
		box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6,
			0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6,
			0 17px 2px -6px rgba(0, 0, 0, 0.2);
	}

	.todo-count {
		float: left;
		text-align: left;
	}

	.todo-count strong {
		font-weight: 300;
	}

	.filters {
		float: right;
		margin: 0;
		padding: 0;
		list-style: none;

	}

	.filters li {
		display: inline;
	}

	.filters li a {
		color: inherit;
		margin: 3px;
		padding: 3px 7px;
		text-decoration: none;
		border: 1px solid transparent;
		border-radius: 3px;
		border-color: #767676;

	}

	.filters li a:hover {
		border-color: #db7676;
	}
	.selected {
		border-color: #db7676;
	}
</style>

ToDoHeader.vue代碼:?

<template>
	<div>
	 
	 <div class="header">
	 
	<p class="title">待辦事項(xiàng)</p>
	 
	 <input class="new-todo" type="text" placeholder="請?zhí)顚懭蝿?wù)" v-model.trim="name"  @keyup.enter="enterName" />
	 
	 </div>
	 
	</div>
	
</template>

<script setup>
	import { ref } from 'vue'
	 const name = ref('')
	  const enterName = () => {
	  emit('addTodo', name.value)
	  name.value = ''
	  }
	  const emit = defineEmits(['addTodo'])

</script>

<style>
	.title{
		border-bottom:1px solid grey;
		text-align:center;
		font-size:36px;
		color:brown;
	}
	.header{
		border:1px solid grey;
	}
	
	.new-todo{
		position: relative;
		top:-20px;
		left: 50px;
		border: none;
		font-size: 20px;
	}
	
</style>

?ToDoMain.vue代碼:

<template>
	<div class="main">
	 <ul class="todo-list">
	 <li v-for="item in list" :key="item.id" :class="{ completed: item.done }">
	  <div class="view">
	  <input class="toggle" type="radio" v-model="item.done" />
	  <label class="zi">{{ item.name }}</label>
	  <button class="destroy" @click="delTodo(item.id)"></button>
	  </div>
	  
	  </li>
	 </ul>
	 
	 </div>
	 
</template>

<script setup>
	const props = defineProps({
			list: {
				type: Array,
				required: true
			},
			})
	const emit = defineEmits(['delTodo'])
  const delTodo = id => {
  id && emit('delToDo', id) // 觸發(fā)事件
  }
</script>

<style>
.toggle{
	width: 30px;
	height: 30px;

}
.view{

margin-left: -40px;	
}
.zi{
	font-size: 18px;
   padding-left: 20px;

}
.destroy{
	border: none;
	margin-left: 10px;
}
</style>

App.vue代碼:

<template>
  <ToDoHeader @addTodo="addTodo" />
  <ToDoMain :list="showList" @delToDo="delToDo" />
  <ToDoFooter :lastLength="lastLength" :status="status" @updateStatus="updateStatus" />
</template>

<script setup>
import ToDoHeader from './components/ToDoHeader.vue'
import ToDoMain from './components/ToDoMain.vue'
import ToDoFooter from './components/ToDoFooter.vue'

import { ref, computed } from 'vue'

const status = ref('all')
const list = ref([
  { id: 1, name: '晨練', done: false, },
  { id: 2, name: '練書法', done: true, },
])

const addTodo = name => {
  list.value.push({ name, done: false, id: ~~(Math.random() * 1000) })
}

const delToDo = id => {
  list.value = list.value.filter(item => item.id !== id)
}

// 計(jì)算剩下沒有完成任務(wù)的條數(shù)
const lastLength = computed(() => {
  return list.value.filter(item => !item.done).length
})

const showList = computed(() => {
  if (status.value === 'all') {
    return list.value;
  }
  if (status.value === 'active') {
    return list.value.filter(item => !item.done)
  }
  if (status.value === 'completed') {
    return list.value.filter(item => item.done)
  }
})

const updateStatus = (status1) => {
  status.value = status1   // 將子組件的狀態(tài)賦值給父組件
}
</script>

main.js代碼:

import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')

?最終效果圖如下:

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript

?功能展示:

用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析),vue.js,前端,javascript今天就分享到此,感謝預(yù)覽~?文章來源地址http://www.zghlxwxcb.cn/news/detail-849122.html

到了這里,關(guān)于用vue.js寫案例——ToDoList待辦事項(xiàng) (步驟和全碼解析)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 用Vue做一個(gè)待辦事項(xiàng)

    用Vue做一個(gè)待辦事項(xiàng)

    ????????這個(gè)待辦事項(xiàng)有以下功能:增刪查,既新增待辦事項(xiàng),刪除待辦事項(xiàng),查看全部,未完成,完成待辦事項(xiàng),當(dāng)鼠標(biāo)移動(dòng)到待辦事項(xiàng)上時(shí)會(huì)顯示刪除按鈕 ? ? ? ? 分為四個(gè)部分來實(shí)現(xiàn):ToDoHeader.vue、ToDoMain.vue、ToDoFooter.vue、ToDoList.vue 頭部部分 列表總體樣式和刪除樣

    2024年04月25日
    瀏覽(22)
  • Vue待辦事項(xiàng)(組件,模塊化)

    //html頁面代碼 !DOCTYPE html html ?? ?head ?? ??? ?meta charset=\\\"utf-8\\\" ?? ??? ?title/title ?? ??? ?style ?? ??? ??? ?* { ?? ??? ??? ??? ?padding: 0; ?? ??? ??? ??? ?margin: 0; ?? ??? ??? ?} ?? ??? ??? ?ul, ?? ??? ??? ?ol { ?? ??? ??? ??? ?list-style: none; ?? ?

    2024年01月21日
    瀏覽(32)
  • vue小案例TodoList

    vue小案例TodoList

    1.首先我們分析怎么把一個(gè)頁面拆成多個(gè)組件,如下圖,我們可以拆成MyHeader、MyList、MyItem、MyFooter,其中MyList包含MyItem 2.觀看如下代碼(我們把MyItem作為MyList的子組件,在父組件中使用v-for指令來循環(huán)展示子組件,我們選擇把數(shù)據(jù)放在MyList中,我們在子組件中使用props來接收父

    2024年02月06日
    瀏覽(19)
  • Vue中TodoList案例_動(dòng)畫

    Vue中TodoList案例_動(dòng)畫

    MyItem.vue :? 主要是引入了import \\\'animate.css\\\'樣式庫,animate.css樣式庫配置見上一篇文章animate.css樣式庫,然后再li標(biāo)簽外套了transition標(biāo)簽,引用了name里面的名稱是animate.css拿過來的,綁定了enter-active-class和leave-active-classanimate庫內(nèi)自帶的綁定樣式 ?

    2024年02月15日
    瀏覽(22)
  • Vue中TodoList案例_編輯

    Vue中TodoList案例_編輯

    nextTick:? MyItem.vue 加一個(gè)編輯按鈕,input框:@blur失去焦點(diǎn)時(shí)觸發(fā)事件handleBlur,ref獲取真實(shí)dom: methods加倆方法: App.vue: methods:中加一個(gè)方法 mounted鉤子中添加 beforeDestroy鉤子中添加 style中加編輯按鈕樣式: ?

    2024年02月15日
    瀏覽(20)
  • Vue中TodoList案例_勾選

    Vue中TodoList案例_勾選

    與上一篇Vue中TodoList案例_添加有三個(gè)文件變化了 App.vue :中加了checkTodo方法 MyList.vue :中拿到checkTodo,再傳給MyItem MyItem.vue: 定義change改變時(shí)候觸發(fā)方法將id傳給App.vue 效果 :勾選時(shí)候數(shù)據(jù)動(dòng)態(tài)變化 ?

    2024年02月16日
    瀏覽(11)
  • Vue中TodoList案例_本地存儲(chǔ)

    Vue中TodoList案例_本地存儲(chǔ)

    App.vue 效果 :數(shù)據(jù)存儲(chǔ)再localStroage中,刷新瀏覽器保存的數(shù)據(jù)仍在。? ?

    2024年02月15日
    瀏覽(23)
  • Vue2-瀏覽器本地存儲(chǔ)(WebStorage)及完善TodoList案例、組件自定義事件及完善TodoList案例

    ??:山不向我走來,我便向它走去 更多Vue知識請點(diǎn)擊——Vue.js 存儲(chǔ)內(nèi)容大小一般支持5MB左右(不同瀏覽器可能還不一樣) 瀏覽器端通過 Window.sessionStorage 和 Window.localStorage 屬性來實(shí)現(xiàn)本地存儲(chǔ)機(jī)制。 1.相關(guān)API (1) xxxxxStorage.setItem(\\\'key\\\', \\\'value\\\'); 該方法接受一個(gè)鍵和值作為參

    2024年02月12日
    瀏覽(25)
  • 手機(jī)待辦事項(xiàng)app哪個(gè)好?

    手機(jī)待辦事項(xiàng)app哪個(gè)好?

    手機(jī)是日常很多人隨身攜帶的設(shè)備,手機(jī)除了擁有通訊功能外,還能幫助大家高效管理日常工作,借助手機(jī)上的待辦事項(xiàng)提醒APP可以快速地幫助大家規(guī)劃日常事務(wù),提高工作的效率。 過去,我也曾經(jīng)在尋找一款能夠?qū)⒐ぷ魅蝿?wù)清晰羅列的APP時(shí),在通過對多款軟件進(jìn)行對比后,

    2024年02月07日
    瀏覽(23)
  • WPF實(shí)戰(zhàn)學(xué)習(xí)筆記06-設(shè)置待辦事項(xiàng)界面

    創(chuàng)建待辦待辦事項(xiàng)集合并初始化 TodoViewModel: 創(chuàng)建綁定右側(cè)命令、變量 設(shè)置界面

    2024年02月15日
    瀏覽(91)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包