Vuejs 實現簡易 todoList 功能 與 組件

来源:https://www.cnblogs.com/evenyao/archive/2018/09/08/9608937.html
-Advertisement-
Play Games

todoList 結合之前 Vuejs 基礎與語法 使用 v-model 雙向綁定 input 輸入內容與數據 data 使用 @click 和 methods 關聯事件 使用 v-for 進行數據迴圈展示 <!DOCTYPE html> <html lang="en"> <head> <meta ...


todoList

結合之前 Vuejs 基礎與語法

  • 使用 v-model 雙向綁定 input 輸入內容與數據 data
  • 使用 @click 和 methods 關聯事件
  • 使用 v-for 進行數據迴圈展示
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>TodoList</title>
  <script src="./vue.js"></script>
</head>
<body>
  <div id="root">
    <div>
      <input v-model="inputValue"/>
      <button @click="handleSubmit">提交</button>
    </div>
    <ul>
      <li v-for="(item,index) of list" :key="index">
        {{item}}
      </li>
    </ul>
  </div>

  <script>
    new Vue({
      el: "#root",
      data: {
        inputValue: '',
        list: []
      },
      methods: {
        handleSubmit: function(){
          this.list.push(this.inputValue)
          this.inputValue = ''
        }
      }
    })
  </script>
</body>
</html>
View Code

JSbin 預覽

todoList 組件拆分

Vuejs 組件相關 詳細參考組件基礎

全局組件

註冊全局組件,併在 HTML 中通過模板調用組件

    //註冊全局組件
    Vue.component('todo-item',{
      template: '<li>item</li>'
    })
    <ul>
      <!-- <li v-for="(item,index) of list" :key="index">
        {{item}}
      </li> -->
      <todo-item></todo-item>      <!-- 通過模板使用組件 -->
    </ul>
View Code

JSbin 預覽

局部組件

在註冊了局部組件之後,直接通過模板調用是不可以的,必須要在最外層的 Vue 的實例中添加 components: { }進行組件聲明。

    //註冊局部組件
    var TodoItem = {
      template: '<li>item</li>'
    }
    new Vue({
      el: "#root",
      components: {   //局部組件需要聲明的 components
        'todo-item': TodoItem
      },
      data: {
        inputValue: '',
        list: []
      },
      methods: {
        handleSubmit: function(){
          this.list.push(this.inputValue)
          this.inputValue = ''
        }
      }
    })
View Code

JSbin 預覽

即通過局部註冊的組件,需要在其他的 Vue 實例中使用該局部組件。必須使用 components 對該局部組件進行註冊。
上面的實例中,要在 Vue 實例中使用 TodoItem 這個局部組件,就通過 todo-item 這個標簽來使用。當在實例中 註冊好了以後,才可以在模板裡面使用這個標簽。這樣就算正確的使用了局部組件。

外部傳遞參數

給 todo-item 標簽添加 :content 屬性,值為迴圈的每一項的內容 "item"
這樣就可以吧 content 傳遞給 todo-item 這個組件

<todo-item v-for="(item,index) of list" :key="index" :content="item"></todo-item> 

但是直接將組件改成是不行的

    Vue.component('todo-item',{
      template: '<li>{{content}}</li>'
    })

需要讓組件接收屬性,所以要在todo-item組件裡面定義props屬性,其值為一個數組 'content' 。
其含義是,該組件接收從外部傳遞的進來的名字叫做 content 的屬性

    Vue.component('todo-item',{
      props: ['content'],
      template: '<li>{{content}}</li>'
    })

JSbin 預覽

組件與實例的關係

Vue 之中,每一個組件其實也是一個 Vue 的實例。因此在 Vue 項目中,是一個個實例構建而成的。
因此組件之中,也可以綁定 @click 事件,添加 methods 屬性。

    Vue.component('todo-item',{
      props: ['content'],
      template: '<li @click="handleClick">{{content}}</li>',
      methods: {
        handleClick: function(){
          alert('clicked')
        }
      }
    })

JSbin 預覽


同樣的實例也可以被稱作一個組件,那麼我們這個根實例當中的 template 模板是什麼呢 ?
如果一個 Vue 實例沒有模板,會到掛載點去找。如下實例,根實例會找到 #root 下麵掛載點的所有內容作為模板。

    new Vue({
      el: "#root",
      data: {
        inputValue: '',
        list: []
      },
      methods: {
        handleSubmit: function(){
          this.list.push(this.inputValue)
          this.inputValue = ''
        }
      }
    })

 

為 todoList 添加刪除功能

通過 發佈 / 訂閱,當子組件點擊時,通知父組件把數據刪除掉。在子組件中,發佈自定義一個 'delete' 事件。調用 this.$emit 方法,並傳遞 index 的值。

子組件向外部進行發佈

    //子組件
    Vue.component('todo-item',{
      props: ['content','index'],
      template: '<li @click="handleClick">{{content}}</li>',
      methods: {
        handleClick: function(){
          //發佈
          this.$emit('delete', this.index)
        }
      }
    })

父組件在模板里創建子組件的時候,監聽子組件向外觸發的 delete 事件,如果監聽到 delete 事件,執行 handleDelete 函數。

      <todo-item v-for="(item,index) of list"
                 :key="index"
                 :content="item"
                 :index="index"
                 @delete="handleDelete">  <!-- 監聽delete事件 -->
      </todo-item>      <!-- 通過模板使用組件 -->

然後在父組件的 methods 中,寫好 handleDelete 方法。

    //最外層實例,父組件
    new Vue({
      el: "#root",
      data: {
        inputValue: '',
        list: []
      },
      methods: {
        handleSubmit: function(){
          this.list.push(this.inputValue)
          this.inputValue = ''
        },
        handleDelete: function(index){
          this.list.splice(index,1)  //使用splice方法刪除list
        }
      }
    })

JSbin 預覽


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習大數據目前主要三個平臺hadoop,storm,spark 比如學hadoop,從哪兒開始學首先要根據你的基本情況而定,如果你就一小白,沒有任何開發基礎,也沒有學過任何開發語言,那就必須先從基礎java開始學起(大數據支持很多開發語言,但企業用的最多的還是JAVA),接下來學習數據結構、關係型數 ...
  • 索引的作用就是快速找出在一個列上用一特定值的行。如果沒有索引,MySQL不得不首先以第一條記錄開始並然後讀完整個表直到它找出相關的行。 索引的類型: 先寫一個建表語句: CREATE TABLE `t_order` ( `id` int(11) unsigned NOT NULL AUTO_INCR ...
  • 本地永久存儲字元串 從網上下載圖片信息然後存儲到本地 ...
  • 恢復內容開始 在不同類之間傳遞數據,我所學到的有三種,1.代理,2.block,3.通知。在這裡,我們先來講一下代理的使用,後面我會繼續講到block和通知。代理通常和協議是一起使用的,協議通常寫在代理類裡面,被代理的類要服從協議。 根據我的理解,在這種情況下:一個類裡面的數據需要在另一個類裡面實現 ...
  • 一、無繼承性的屬性 1、display:規定元素應該生成的框的類型 2、文本屬性: vertical-align:垂直文本對齊 text-decoration:規定添加到文本的裝飾 text-shadow:文本陰影效果 white-space:空白符的處理 unicode-bidi:設置文本的方向 ...
  • 本博文歸納在 Vue 學習過程中, Vue-cli 工具的使用說明。除此之外還通過 Vue-cli 工具將之前 Vuejs 基本語法當中實現的 todoList 進行重構。 安裝 創建 創建一個基於 webpack 模板的新項目,在此之前,先 cd Desktop 到桌面路徑 各選項簡介 安裝完畢之 ...
  • 《一統江湖的大前端》系列是自己的學習筆記,旨在介紹javascript在非網頁開發領域的應用案例和發現各類好玩的js庫,不定期更新。如果你對前端的理解還是寫寫頁面綁綁事件,那你真的是有點OUT了,前端能做的事情已經太多了, , , , , , 甚至 ,什麼火就搞什麼,絕對是專業的 蹭熱點小能手 。 ...
  • 字元串的生成轉換 你可以將任何類型的數據都轉換為字元串,你可以用下麵三種方法的任何一種: 字元串轉化為其他類型 js提供了parseInt()和parseFloat()兩個轉換函數,Number也可以實現轉化 字元的操作 字元串增刪查改 字元串比較 比較兩個字元串,比較是規則是按照字母表順序比較的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...