vue的增刪改查

来源:http://www.cnblogs.com/liudm/archive/2017/07/14/7172162.html
-Advertisement-
Play Games

我們把這些用戶信息保存到list的數組中,然後增刪改查就在這個數組上進行: 這裡面的表單有:文本輸入框,單選按鈕,select選擇框,覆選框等。 1. 展示數據 我們的數據都放在數組list中,但是這裡並不直接對list對迴圈輸出,而是先把list中的數據給一個數組slist,對slist進行迴圈輸 ...


我們把這些用戶信息保存到list的數組中,然後增刪改查就在這個數組上進行:

list: [
    {
        username: 'aaaaa',
        email: '[email protected]',
        sex: '男',
        province: '北京市',
        hobby: ['籃球', '讀書', '編程']
    },
    {
        username: 'bbbbb',
        email: '[email protected]',
        sex: '女',
        province: '河北省',
        hobby: ['彈琴', '讀書', '插畫']
    }
    // ...
]

這裡面的表單有:文本輸入框,單選按鈕,select選擇框,覆選框等。

1. 展示數據

我們的數據都放在數組list中,但是這裡並不直接對list對迴圈輸出,而是先把list中的數據給一個數組slist,對slist進行迴圈輸出。因為我們在後面的查詢功能中需要對數據進行過濾,數組list一直保存著原始數據(包括新增、修改後或已刪除後),而數組slist只負責展示。

在vue中提供一個setSlist方法,將需要展示的數據給了數組slist:

// 獲取需要渲染到頁面中的數據
setSlist(arr) {
    this.slist = JSON.parse(JSON.stringify(arr));
}

然後在html中使用v-for把slist數組渲染出來:

<tr v-cloak v-for="(item, index) of slist">
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td><a href="javascript:;" @click="showOverlay(index)">修改</a> | <a href="javascript:;" @click="del(index)">刪除</a></td>
</tr>

在操作這一欄中,給修改和刪除操作綁定上事件。

 

2. 增加和刪除功能

 

把增加功能和刪除合併到一起,是這兩個功能相對來說都比較簡單。

增加用戶時使用push方法,把用戶的信息添加到list數組的最後:

this.list.push({
    username: 'ffff',
    email: '[email protected]',
    sex: '女',
    province: '河南省',
    hobby: ['彈琴', '插畫']
});

這樣就能添加一位ffff的用戶了。

刪除用戶時,通過splice(index, 1),可以刪除index位置的數據,頁面上的數據自動就會更新。

3. 修改功能

假設我們彈層里的數據是selectedlist,那麼每次修改時,把index位置的數據給了selectedlist,然後在彈層中修改selectedlist。我們也能看到修改數據的類型: 文本框(用戶名,郵箱),單選按鈕(性別),select選擇框(所在省份),多選框(愛好),這裡我們主要練習的是表單處理(https://cn.vuejs.org/v2/guide/forms.html)。彈層是否顯示用變數isActive來控制:

// 修改數據
modifyData(index) {
    this.selected = index; // 修改的位置
    this.selectedlist = this.list[index];
    this.isActive = true;
}

有沒有發現一個問題,當修改彈層中的信息時,表格中的數據也同步更新了。可是我們本身是希望當點擊保存按鈕時,才把彈層中的數據保存到表格裡。問題的根源就出在這裡:

this.selectedlist = this.list[index];

因為list[index]是個Object類型的數據,若使用=賦值,則賦值操作為淺度拷貝(把數據的地址賦值給對應變數,而沒有把具體的數據複製給變數,變數會隨數據值的變化而變化),selectedlist與list[index]使用相同的數據地址,互相引起數據值的變化。因此這裡我們需要進行深度拷貝:

this.selectedlist = JSON.parse( JSON.stringify(this.list[index]) ); // 先轉換為字元串,然後再轉換

當用戶修改數據後,selectedlist就會發生變化,點擊保存按鈕時,將數據重新保存到index位置:

/*
  this.list 數據數組
  this.selected 剛纔修改的位置
  this.selectedlist 需要保存的數據
*/
Vue.set(this.list, this.selected, this.selectedlist);

4. 查詢功能

在第1小節中我們已經說過,在頁面表格中展示的是slist中的數據,就是為了方便執行查詢操作:

// 獲取需要渲染到頁面中的數據
setSlist(arr) {
    this.slist = JSON.parse(JSON.stringify(arr));
}

每次根據某些條件將過濾後的數據賦值給slist數組,展示出查詢後的數據。這裡我們的查詢實現了兩個小功能:

  1. 用戶在輸入某個字元後,自動在輸入框下方用列表展示出用戶可能要查詢的詞語(如用戶名等)
  2. 同步更新表格中的數據

這裡我們通過用戶名和郵箱進行查詢,因此在過濾數據時,需要檢測用戶名和郵箱是否含有查詢的單詞。我們先給輸入框綁定一個input事件,同時用datalist展示用戶可能要查詢的詞語:

<input type="text" placeholder="search" @input="search" list="cars" class="search">
<datalist id="cars">
    <option v-for="item in searchlist" :value="item"></option>
</datalist>

search功能的實現,searchlist為在輸入框下方展示的可能要搜索的詞語,ss數組則保存過濾後的數據,當迴圈完畢後,設置調用setSlist方法修改slist數組:

每當用戶輸入或者刪除一個字元時都會調用search方法,執行查詢操作,當用點擊展示詞語列表時,也會調用search方法。


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

-Advertisement-
Play Games
更多相關文章
  • 前面的話 每次寫HTML結構涉及到CSS命名時,都要掙扎一番。關於CSS命名的規範,市面上有不少,如OOCSS、SMACSS、BEM和MVCSS等。在這裡面最火的應該算BEM了。本文將詳細介紹CSS命名 主流命名 【BEM】 說起CSS命名,當然要提到BEM。BEM的意思就是B模塊(block)、E ...
  • 工作中遇到的功能點,覺得以後可以復用,就打算備一下咯 格式要求(例):On Friday, July 14, 2017 我的思路是用js就可以實現了,具體代碼如下: ...
  • 前面的話 由歷史原因及個人習慣引起的 DOM 結構、命名不統一,導致不同成員在維護同一頁面時,效率低下,迭代、維護成本極高。所以,使用統一的命名規範非常必要。本文將詳細介紹命名規範 目錄命名 1、項目文件夾:projectname 2、樣式文件夾:css 3、腳本文件夾:js 4、樣式類圖片文件夾: ...
  • 初始化本地git倉庫(創建新倉庫) git init 配置用戶名 git config --global user.name "xxx" 配置郵件 git config --global user.email "[email protected]" git status等命令自動著色 git config -- ...
  • 假如同一個標簽被多個選擇器選中,每個選擇器都設置了相同的樣式,瀏覽器中載入時這個樣式聽誰的? 不同選擇器設置的同一個樣式,只會選擇一個進行載入,不會疊加。 為瞭解決聽誰的問題,引入層疊性的概念。 層疊性:多個選擇器選中同一個標簽,設置同一個樣式,瀏覽器中載入時,不會載入所有的屬性值,挑選其中一個載入 ...
  • 以下兩種方法都是將兩個網頁放在同一個文件夾里,是同級文件。 一、HTML 鏈接是通過 <a> 標簽進行定義的 (這裡的網頁命名方式不准確,需根據特定情況命名) 二、另一種鏈接是通過JavaScript實現 (這種方法需要引用jquery,jquery需要下載,,我在圖片上會用紅圈畫出引用的jquer ...
  • 什麼是LESSCSS LESSCSS是一種動態樣式語言,屬於CSS預處理語言的一種,它使用類似CSS的語法,為CSS的賦予了動態語言的特性,如變數、繼承、運算、函數等,更方便CSS的編寫和維護。 LESSCSS可以在多種語言、環境中使用,包括瀏覽器端、桌面客戶端、服務端。 語言特性快速預覽: 變數: ...
  • 做了一個網站,放到線上,用微信打開,點擊分享,可是分享後發給朋友的鏈接卡片是微信預設自帶的,如下: 這標題,描述以及圖片是預設自帶的,醜不說,分享給別人還以為是盜號網站呢,而接入微信的JSSDK後,分享可以自定義內容,如下: 我承認,雖然這分享的標題和內容也並不正經,但這不妨礙我表達 我們可以通過微 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...