首頁 web前端 js教程 使用vue如何寫todolist元件?

使用vue如何寫todolist元件?

Jun 11, 2018 am 10:14 AM
todolist vue

這篇文章主要介紹了vue元件編寫之todolist元件的實例講解,本文給大家介紹的非常詳細,需要的朋友可以參考下

我們在topNav這個頁面上插入一個todolist子元件

我不知道怎麼回事,這裡的markdown的程式碼總是串列。 。所以程式碼看得不舒服,見諒啊,我最後會放github的原始碼位址。

1. 父元件topNav中註冊子元件,引入子元件

<template>
 <p>
  <p>下面这一行就是定义的组件名称</p>
  <todo-list></todo-list>
  <router-view></router-view>
 </p>
</template>
<script>
/*
登入後複製

    1. 透過import來引進我們的子元件drawerLayout

#    2. 引進子元件,並重新取名為todoList,然後在components組冊一下

    3.在我們的template中按照html標籤的形式使用元件,todoList就是

#注意:

    (1) 子組件的名字無所謂,但是我們引入的那個子組件名稱todoList,第二個字的首字母一定要大寫(不然你會踩坑的)

    (2) 使用標籤時,todoList,就是todo-list,就是寫成駝峰命名法(通俗說就是在第二個字的大寫首字母改成小寫形式,然後前面加一個「-」)

*/
import todoList from &#39;../components/todoList.vue&#39;
 export default {
  components: {
   todoList
  },
  data() {
   return {
   };
  }
 }
</script>
登入後複製

2. 先看看元件的功能

首先我們先大體看看元件長啥樣,然後我才去構思如何寫

首先我們看到的是一個input輸入框,預設顯示edit..,當我們沒有新增資料的時候,下方顯示的「暫無內容」

 

#接著,我們輸入資料「第一個範例」然後敲擊回車,就會出現一行list

list包含一個單選框,文字,還有一個刪除的按鈕

##那要怎麼刪除呢?那既然要做,一定稍微做多一點功能,把一些內部指令都用一下,我們設定的刪除規則是

先選中該list,然後點擊刪除,然後該筆記錄就沒有了,如果刪除這個資料後,就沒有list了,那「暫無內容」就要顯示出來了

#3. 開始寫我們的todo子元件了

關於程式碼中的樣式我放在最後,所以此刻你可以忽略一些class

我們先把這個todolist的大體框架搭好,然後往裡面增加功能

<template>
<p class="ex1">
  <p class="input-text">
 <label for="inputNum">请输入:</label>
 <input type="text" 
    id="inputNum" 
    name="inputNum" 
    placeholder="edit..">

 <!--列表内容-->
 <ul>
  <li>
   <input type="checkbox" >
   <span>dd</span>
   <button>删除</button>
  </li>
 </ul>
 <p class="empty" v-if="!inputList.length">暂无内容</p>
  </p>
</p>
</template>
<script>
 export default {
  data () {
   return {
    inputList: [],
    inputItem: {
     content: &#39;&#39;,
  finished: false,
  deleted: false
 }
   }
  },
  methods: {
   //将输入框的数据添加到list中  
   addItem: function() {}
   //改变选中状态
   changeState: function(index) {},
   //删除列表元素
   deleteItem: function(index) {}
  }
 }
</script>
登入後複製

 

接下來我就不針對每一小步都給出程式碼來更新了,因為篇幅太大,我會更具一個功能塊來寫(我會很詳細的)

首先我們先理清以下思路

在輸入框中輸入數據,按下回車就會在下方顯示一行list列表(包括一個單選框,輸入的數據,藍色操作按鈕)

將輸入框的值和inputItem.content進行雙向綁定

給輸入框綁定回車事件(@keydown.13)到addItem方法中,每次輸入回車,就將輸入框的資料加入list清單中(inputList數組中)

利用v-for指令遍歷inputList中的值並顯示

選中單選框,list的內容變成刪除效果(中間橫線劃過),藍色操作按鈕變成紅色刪除按鈕,點選按鈕,就會刪除該列list

將單選框的checked和inputItem的finished進行綁定,綁定後就可以利用這個finished來做一些別的事了

剛添加進列表內容的list的按鈕是藍色操作按鈕,如果我們要通過單選框的選中與否的兩個狀態會讓content的子加入和移除一個class(就是上面說的刪除效果),以​​及將按鈕變成紅色的刪除按鈕,那就可以綁定changeState方法來操作

那刪除功能呢?首先,我們要選中該行list,再點擊刪除才能刪除該行數據,對吧。所以我們將按鈕綁定一deleteItem方法,方法做的事情就是先檢測該行的finished是否是true,如果是true,那麼我們就刪除該行資料

我們先完成新增功能:在輸入框輸入數據,回車,會在下面顯示一行列表(包括單選框,輸入的數據,刪除按鈕)

<template>
<p class="ex1">
  <p class="input-text">
 <label for="inputNum">请输入:</label>
 
  <!--@keydow.13表示回车的事件-->
  <!--v-model是为了让输入的数据和inputItem.content同步-->
  
  <input type="text" id="inputNum" name="inputNum" placeholder="edit.."
   @keydown.13="addItem" v-model="inputItem.content" class="edit"
  >
  <!--列表内容-->
  <ul class="task">
   <li v-for="(key, item) in inputList">
    <input type="checkbox" :checked="item.finished">
    <span>{{key.content}}</span>
    <button class="del">删除</button>
   </li>
  </ul>
 <p class="empty" v-if="!inputList.length">暂无内容</p>
  </p>
</p>
</template>
<script>
 export default {
  data () {...省略  },
  methods: {
   addItem: function() {
     this.inputList.push(this.inputItem);
     /*
     为什么我们要对inputItem再次初始化?
     解答:因为每次在输入框中输入数据,都会同时改变inputItem的content属性,
     然后我们点击回车,该inputItem的整个对象都添加进inputList中,
     按正常逻辑来说,inputList内的内容和inputItem是没有联系了。
     如果我们此时不对inputItem进行再次初始化,那么就会发现你再次在输入框中输入数据的时候,
     会同时改变下面的list的值,简易你们把初始化的代码去掉,运行下试试看!
     */
  this.inputItem = {
      content: &#39;&#39;,
      finished: false,
      deleted: false
  };
   },
   //改变选中状态
   changeState: function(index) {},
   //删除列表元素
   deleteItem: function(index) {}
  }
 }
</script>
登入後複製

我們先看看列表內容的代碼

<!--列表内容-->
<ul class="task">
 <li v-for="(item, index) in inputList">
  <!--单选框绑定了item.finished,还添加了点击事件-->
  <input type="checkbox"
  :checked="item.finished"
  @click="changeState(index)"
  >
  <!--通过item.finished值来动态绑定class-->
  <span :class="{&#39;finish&#39;:item.finished}">{{item.content}}</span>
  <!--按钮的颜色通过动态添加class来实现,然后按钮的文本通过改变isDel来实现,isDel的改变也是通过changeState方法来操作的-->
  <button @click="deleteItem(index)"
   class="del"
   :class="{&#39;native&#39;:item.finished === true}"
  >{{isDel}}</button>
 </li>
</ul>
<p class="empty" v-if="!inputList.length">暂无内容</p>
登入後複製

然後我們講解changeState方法

//改变选中状态
   changeState: function (index) {
    // this.inputList[index].finished = true 错误:这样如果点击第二次,无法回到false,就会一直true状态
    this.inputList[index].finished = !this.inputList[index].finished;
    // 根据finished的值来对应的修改isDel的值,isDel的值就是按钮的文本
    if (this.inputList[index].finished) {
   this.isDel = &#39;删除&#39;
    }else {
     this.isDel = &#39;操作&#39;
 }
   },
//删除列表元素
   deleteItem: function (index) {
   if (this.inputList[index].finished) {
    his.inputList.splice(index,1);
   }
   }
登入後複製
上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

利用AngularJS如何實作下載excel檔案功能

在vue中如何進行config設定(詳細教學)

在JS中如何實現多物體運動(詳細教學)

#

以上是使用vue如何寫todolist元件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

vue怎麼給按鈕添加函數 vue怎麼給按鈕添加函數 Apr 08, 2025 am 08:51 AM

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

vue中的watch怎麼用 vue中的watch怎麼用 Apr 07, 2025 pm 11:36 PM

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

vue多頁面開發是啥意思 vue多頁面開發是啥意思 Apr 07, 2025 pm 11:57 PM

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

vue.js怎麼引用js文件 vue.js怎麼引用js文件 Apr 07, 2025 pm 11:27 PM

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 &lt;script&gt; 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

vue返回上一頁的方法 vue返回上一頁的方法 Apr 07, 2025 pm 11:30 PM

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 &lt;router-link to=&quot;/&quot;&gt; 組件window.history.back(),方法選擇取決於場景。

vue遍歷怎麼用 vue遍歷怎麼用 Apr 07, 2025 pm 11:48 PM

Vue.js 遍歷數組和對像有三種常見方法:v-for 指令用於遍歷每個元素並渲染模板;v-bind 指令可與 v-for 一起使用,為每個元素動態設置屬性值;.map 方法可將數組元素轉換為新數組。

vue的div怎麼跳轉 vue的div怎麼跳轉 Apr 08, 2025 am 09:18 AM

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。

See all articles