Ajax — 大事件項目(第四天)

分類管理

添加分類

初步使用彈出層

  • 給 “添加分類” 綁定一個單擊事件
  • 單擊事件中,使用 layer.open() 實現一個彈出層
    • type: 1, 彈層的類型是頁面層
    • title, “添加文字分類”
    • content: ‘字符串,DOM’,
    • area: [‘500px’, ‘250px’]
 // ------------------  點擊 添加類別 的時候,顯示彈出層 -------------$('#addBtn').click(function () {// layui官網 --> 文檔 --> 內置模塊 --> 彈出層 --> 獨立版本:layer.layui.com// 或者,直接打開彈出層的獨立版本網站:layer.layui.com//頁面層add_id = layer.open({type: 1,// skin: 'layui-layer-rim', //加上邊框title: '添加文章類別',area: ['500px', '250px'], //寬高content: $('#add').html() // 內容,可以使用字符串,也可以使用DOM});});

彈層的內容區,使用DOM

我們可以在html頁面中,先準備一個模板(比如id=“add”)。然后open方法的content選項,我們使用 $(’#add’).html()

js代碼:

// 點擊添加分類按鈕,顯示彈層$('#showAdd').click(function () {var index = layer.open({type: 1, // 層的類型,1表示頁面層title: '添加文章類別', // 標題content: $('#add').html(), // 內容area: ['500px', '250px'], // 寬度高度});});

html中,添加的模板

<!-- 添加的彈層模板 --><script type="text/html" id="add"><form class="layui-form" action="" style="margin-top: 15px; margin-right: 50px;"><!-- 第一行 分類名稱 --><div class="layui-form-item"><label class="layui-form-label">分類名稱</label><div class="layui-input-block"><input type="text" name="name" required  lay-verify="required" placeholder="請輸入標題" autocomplete="off" class="layui-input"></div></div><!-- 第二行 分類別名  --><div class="layui-form-item"><label class="layui-form-label">分類別名</label><div class="layui-input-block"><input type="text" name="alias" required  lay-verify="required" placeholder="請輸入標題" autocomplete="off" class="layui-input"></div></div><!-- 第三行 按鈕 --><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit lay-filter="formDemo">確認添加</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div></div></form></script>

完成添加分類

  • 必須使用事件委托的方案,為添加的表單注冊submit事件
  • 發送ajax請求,如果說成功了
    • 關閉彈層
      • 設置彈層的時候,使用變量接受彈層的返回值(每個彈層都有一個索引或者叫做id)
      • layer.close(層的索引或id)
      • 注意彈層索引,要設置為全局變量
    • 從新渲染數據
      • 調用renderHtml()即可渲染

刪除分類

接口是需要的id參數是一個動態參數,使用方法: /my/article/deletecate/3

// /my/article/deletecate/:id
// /my/article/deletecate/3   ---- 刪除id為3的數據
// /my/article/deletecate/12   ---- 刪除id為12的數據
  • 也是,必須使用事件委托的方案,為刪除注冊單擊事件
  • 使用 layer.confirm('是否要刪除', {icon: 3, title: '提示'}, function (index) {})
  • 獲取分類的id
    • 渲染頁面的時候,給每個刪除按鈕,設置一個data-id屬性,值就是當前分類的Id,注意 Id 的 I 是大寫的。
    • 事件內部,可以通過事件源獲取到id,注意$(this)指向改變
  • 按照接口要求發送ajax請求,完成刪除
// -----------------  點擊刪除,完成刪除功能 -----------------
$('body').on('click', '.delete', function () {let that = $(this);layer.confirm('確定刪除嗎?', { icon: 3, title: '提示' }, function (index) {//do something// 獲取idlet id = that.attr('data-id');// ajax請求$.ajax({url: '/my/article/deletecate/' + id,success: function (res) {layer.msg(res.message);if (res.status === 0) {// 刪除成功,重新渲染頁面renderHtml();}}});layer.close(index); // 關閉彈層});
})

編輯分類

思路:

  • 點擊編輯,彈層窗口(樣子和添加的窗口一樣)
    • 事件委托的方案,為“編輯”按鈕注冊單擊事件(給編輯按鈕,添加了一個類 edit)
    • 彈層的JS代碼,復制添加的代碼,然后修改
    • 彈層的內容,直接復制添加的模板(復制之后,記得修改模板的id和form的id)
  • 為表單賦值
    • 為 “編輯” 按鈕,添加三個自定義屬性,data-id / data-name / data-alias
    • 表單中,有一個隱藏域(id)
    • 快速為表單元素賦值(必須等彈層出來,然后在為表單賦值)
  • 點擊確認修改之后,可以實現修改
    // ------------------ 點擊編輯,顯示彈出層 ------------------$('body').on('click', '.edit', function () {// 先獲取按鈕的三個 data-xxx 屬性值,他們分別是 id、name、aliaslet id = $(this).attr('data-id');let name = $(this).attr('data-name');let alias = $(this).attr('data-alias');edit_id = layer.open({type: 1,// skin: 'layui-layer-rim', //加上邊框title: '編輯文章類別',area: ['500px', '250px'], //寬高content: $('#edit').html(), // 內容,可以使用字符串,也可以使用DOMsuccess: function () {// 彈層成功后,觸發的一個函數。在這里快速為表單賦值form.val('editForm', {id, name, alias});}});});

在這里插入圖片描述

具體實現:

  1. 在頁面渲染的時候,使用{{each}} 循環tr的時候,我們為 “編輯” 按鈕,設置三個自定義的屬性

    • data-id
    • data-name
    • data-alias
    <!-- 數據列表的模板 -->
    <script type="text/html" id="tpl-cateList">{{each data val}}<tr><td>{{val.name}}</td><td>{{val.alias}}</td><td><button data-id="{{val.Id}}" data-name="{{val.name}}" data-alias="{{val.alias}}" type="button" class="layui-btn layui-btn-xs editCate">編輯</button><button data-id="{{val.Id}}" type="button" class="layui-btn layui-btn-xs layui-btn-danger deleteCate">刪除</button></td></tr>{{/each}}
    </script>
    
  2. 點擊編輯的時候,獲取上述三個自定義屬性的值。值,分別設置給彈層的表單中的input

    // 點擊編輯的時候,彈層
    $('body').on('click', '.editCate', function () {// 先獲取按鈕的三個 data-xxx 屬性值,他們分別是 id、name、aliaslet id = $(this).attr('data-id');let name = $(this).attr('data-name');let alias = $(this).attr('data-alias');// 彈層editIndex = layer.open({type: 1, // 頁面層title: '編輯分類',content: $('#tpl-edit').html(),area: ['500px', '250px'],// 等彈層出來之后,執行下面的success方法success: function () {// 關于 editForm參數,自行查看文檔// editForm對應的是表單的lay-filter="editForm"form.val('editForm', {id, name, alias});}});
    });
    
  3. 點擊確認修改的時候,獲取表單的三項值,處理一下Id,ajax提交,完成修改。

    奇葩的Id,I 是大寫的。。。

    // 當編輯的表單提交的時候,發送ajax請求,完成編輯
    // $('#form-edit').submit(); // 直接注冊不行,必須使用事件委托
    $('body').on('submit', '#form-edit', function (e) {e.preventDefault();// console.log($(this).serialize()); // name=xxx&alias=16&id=1// var data = $(this).serialize().replace('id', 'Id');// console.log($(this).serializeArray());var data = $(this).serializeArray();data[0].name = 'Id';console.log(data);// console.log(data);$.post('/my/article/updatecate', data, function (res) {if (res.status !== 0) {return layer.msg(res.message);}layer.msg('更新分類成功');// 1. 從新渲染頁面renderHtml();// 2. 關閉彈層layer.close(editIndex);});
    

})

## 提交一下`git add .``git commit -m '完成了文章分類的增刪改查'`# 文章管理## 文章列表- 準備工作(創建頁面、掛好鏈接、引入所需的css和js文件)- 頁面布局 - 搜索區- 找到“組裝行內表單”- 下拉框沒有顯示,需要把 layui.all.js 的加載放到頁面的后面- 表格區- 自行復制代碼,然后跳轉寬度、設置按鈕- 分頁區
- 定義渲染文章列表的函數 (renderArticle)
- 定義renderArticle函數,函數內容,發送ajax請求,獲取數據,并調用template渲染
- ajax請求參數,我們先定義成全局變量
- 通過模板引擎提供的過濾器功能,對時間進行處理## 刪除文章- 給刪除按鈕,添加一個data-id屬性,值就是當前文章的id
- 給刪除按鈕添加一個類 delete
- JS代碼中,事件委托的方案,給刪除注冊單擊事件
- 事件內部,獲取id
- 詢問是否要刪除
- 如果確定刪除,則發送ajax請求,完成刪除
- 完成刪除之后,從新渲染頁面## 添加文章- 準備工作```html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="/assets/lib/layui/css/layui.css"><link rel="stylesheet" href="/assets/lib/cropper/cropper.css"><link rel="stylesheet" href="/assets/css/article/publish.css"><script src="/assets/lib/jquery.js"></script><!-- 剪裁用的js --><script src="/assets/lib/cropper/Cropper.js"></script><script src="/assets/lib/cropper/jquery-cropper.js"></script><!-- 內容區的富文本編輯器用的js --><script src="/assets/lib/tinymce/tinymce.min.js"></script><script src="/assets/lib/tinymce/tinymce_setup.js"></script><!-- 模板引擎js --><script src="/assets/lib/template-web.js"></script><script src="/assets/js/common.js"></script><script src="/assets/js/article/publish.js"></script>
</head>
<body><script src="/assets/lib/layui/layui.all.js"></script>
</body>
</html>
  • 頁面布局

    • 使用卡片面板
    • 內容區放表單
    • 表單的內容區
      • 去 “富文本和封面.md” 中,復制html代碼
      • 在自己的js中,調用一個 initEditor() 函數,即可實現
    • 表單的圖片裁剪區
      • 去 “富文本和封面.md” 中,復制html代碼
      • 去 “富文本和封面.md” 中,復制css代碼
      • 去 “富文本和封面.md” 中,復制js代碼,實現初始化剪裁效果
    • 按鈕區
      • 不要使用重置按鈕
    • 使用兩個提交按鈕,修改里面的文字為 “發布”和“存為草稿”即可
  • 介紹一下富文本編輯器

    • 富文本編輯,也叫做在線文本編輯器、或在線html編輯器
    • 它就是一個插件,允許我們在頁面中,像編輯word一樣來編輯你的文章內容
    • 常用的富文本編輯器舉例
      • tinymce (我們項目中使用的,可制定性比較高)
      • ueditor(百度的產品)
      • ckeditor (外國的)
      • kindeditor(博客園使用了它)
    • 一般在發布文章的時候使用它。

發布文章的具體實現:

  • 獲取所有的分類,渲染到下拉框

    • ajax請求之后,獲取到分類
    • 使用模板引擎渲染select框
    • 動態添加select框之后,發現頁面中的下拉框看不見了
      • 解決辦法是:使用 form.render() 方法更新渲染即可
  • 點擊發布的時候,讓狀態是已發布,點擊存為草稿,讓狀態是草稿

    var state = '已發布';
    // 給發布和存為草稿分別注冊一個單擊事件
    $('button:contains("發布")').click(function () {state = '已發布';
    });
    $('button:contains("存為草稿")').click(function () {state = '草稿';
    });
    
  • 把表單中,每個表單元素的name檢查一下,因為FormData是根據name獲取值的

  • 點擊發布或存為草稿的時候,同樣會觸發表單提交事件

    • 收集表單各項數據 (title/content/cate_id)
    • 手動追加 state
    • 完成圖片裁剪,并將得到的圖片追加到FormData中
      • 裁剪之后,完成ajax請求,提交數據到接口,從而完成添加

編輯文章

  • 復制添加文章頁為編輯頁面(edit.html)

  • 文章列表頁,給“編輯掛超鏈接”,跳轉到編輯頁面,并掛id參數

    • id在編輯頁面可以區分當前修改的是那篇文章
  • 到編輯頁面的js中

    • 獲取地址欄的id
    • 根據id獲取當前文章
    • 為表單快速賦值
    • 將剪裁區的圖片換成當前文章原始的圖片

其他JS代碼參照添加文章的代碼即可

分頁

  • 文章列表頁,加載laypage模塊
  • 編寫渲染分頁的函數 (renderPage)
  • 渲染完文章列表之后,馬上渲染分頁
  • renderPage函數
    • 根據官方文檔,生成分頁效果
    • jump事件中,修改請求參數中的pagenum和pagesize,并重新渲染列表

搜索

  • 先處理好搜索區的兩個下拉框
  • 監聽表單的提交事件
    • 獲取下拉框的值
    • 修改獲取文章列表的請求參數
    • 重新渲染文章列表

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248012.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redis學習(四)

一、Redis 鍵(key) 1、Redis 鍵命令用于管理 redis 的鍵。 2、Redis 鍵命令的基本語法如下&#xff1a;redis 127.0.0.1:6379> COMMAND KEY_NAME 3、常用key命令 keys * 獲取所有的keyselect 0 選擇第一個庫move myString 1 將當前的數據庫key移動到某個…

TCP/IP(三):IP協議相關技術

在前兩篇文章中&#xff0c;我分別介紹了數據鏈路層和網絡層的IP協議。雖然這個系列教程的重點是搞定 TCP/IP&#xff0c;不過不用著急&#xff0c;本文簡要介紹完與 IP 協議相關的技術&#xff0c;下一篇文章就會正式、詳細的介紹 傳輸層與 TCP 協議。這篇文章會介紹 DNS、ARP…

Node — 第一天

Node-01 會 JavaScript&#xff0c;就能學會 Node.js&#xff01;&#xff01;&#xff01; **Node.js 的官網地址&#xff1a; ** Node.js 的學習路徑&#xff1a; JavaScript 基礎語法 Node.js 內置 API 模塊&#xff08;fs、path、http等&#xff09; 第三方 API 模塊&…

TCP/IP(四):TCP 與 UDP 協議簡介

從本章開始&#xff0c;我們開始介紹最重要的傳輸層。傳輸層位于 OSI 七層模型的第四層&#xff08;由下往上&#xff09;。顧名思義&#xff0c;傳輸層的主要作用是實現應用程序之間的通信。網絡層主要是保證不同數據鏈路下數據的可達性&#xff0c;至于如何傳輸數據則是由傳輸…

Node — 第二天

http模塊 搭建服務器的步驟 ① 導入 http 模塊 ② 創建 web 服務器實例 ③ 為服務器實例綁定 request 事件&#xff0c;監聽客戶端的請求 ④ 啟動服務器 // ① 導入 http 模塊 const http require(http);// ② 創建 web 服務器實例 const server http.createServer();/…

《學習之道》第九章不要突擊工作

靈感從天而降的時刻確實是存在的。 這樣少見的創造性突破&#xff0c;通常是在經歷了一番神經緊張的準備、竭盡全力的努力&#xff0c;甚至包括熬夜工作后才姍姍來遲。這與 數學 和 科學標準的一天學習 是大不相同的。 它更像體育運動&#xff1a;每隔一陣子會有一天的比賽&…

TCP/IP(五):TCP 協議詳解

上一節 中講過&#xff0c;TCP 協議是面向有連接的協議&#xff0c;它具有丟包重發和流量控制的功能&#xff0c;這是它區別于 UDP 協議最大的特點。本文就主要討論這兩個功能。 數據包重發 數據發送 丟包重發的前提是發送方能夠知道接收方是否成功的接收了消息。所以&#…

nodeJS — 學習的筆記

Node介紹 為什么要學習Node.js 企業需求 具有服務端開發經驗更改front-endback-end全棧開發工程師基本的網站開發能力 服務端前端運維部署 多人社區 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MVqHkEIo-1588084625862)(C:\Users\A\AppData\R…

TCP/IP(六):HTTP 與 HTTPS 簡介

本文是準備面試過程中網絡部分總結整理的最后一篇文章&#xff0c;主要介紹以下知識&#xff1a; HTTP 協議概述POST 請求和 GET 請求Cookie 和 Session數據傳輸時的加密HTTPS 簡介 HTTP 協議 在 OSI 七層模型中&#xff0c;HTTP 協議位于最頂層的應用層中。通過瀏覽器訪問網…

Node — 第三天

模塊化 什么是模塊化 模塊化是指解決一個復雜問題時&#xff0c;自頂向下逐層把系統劃分成若干模塊的過程。 對于整個系統來說&#xff0c;模塊是可組合、分解和更換的單元。 生活中的模塊化 編程中的模塊化 編程領域中的模塊化&#xff0c;就是遵守固定的規則&#xff0c;…

FireDAC 中文字段過濾問題

當使用 FireDAC Filter 過濾數據的時候&#xff0c;通常這樣寫&#xff1a; FDMemTable.Filtered : False; FDMemTable1.Filter : 姓名 string(edtFilter.Text).QuotedString; FDMemTable.Filtered : True; 將會報錯&#xff1a;[FireDAC][Stan][Eval]-107. Invalid characte…

UIScrollViewDelegate-代理API詳解

在iOS編程中&#xff0c;經常用到UIScrollView控件。自然也會用到UIScrollViewDelegate協議。 今天就抽空&#xff0c;研究了一下UIScrollViewDelegate中所有的委托方法。 僅做Mark&#xff01;如有&#xff0c;錯誤之處&#xff0c;歡迎留言指正&#xff0c;交流&#xff01;貼…

License for package Android SDK Build-Tools 28.0.2 not accepted.(MAC)

https://blog.csdn.net/user11223344abc/article/details/83997907轉載于:https://www.cnblogs.com/dtdxrk/p/10812469.html

Express — 使用步驟

Express Express 介紹安裝搭建服務器的步驟express提供的新方法GET接口 獲取GET中的請求參數 POST接口 獲取POST請求提交的數據 中間件原理中間件語法中間件初體驗&#xff08;設置響應頭&#xff09;中間件開放靜態資源中間件接收POST請求體中間件返回404頁面 express 介紹 E…

大模型工具_Langchain-Chatchat

https://github.com/chatchat-space/Langchain-Chatchat 原Langchain-ChatGLM 1 功能 整體功能&#xff0c;想解決什么問題 基于 Langchain 與 ChatGLM 等LLM模型&#xff0c;搭建一套針對中文場景與開源模型&#xff0c;界面友好、可離線運行的知識庫問答解決方案。 當前解決…

iOS 鍵盤風格詳解UIKeyboardType

一、鍵盤風格 UIKit框架支持8種風格鍵盤。 [java] view plaincopy print?typedef enum { UIKeyboardTypeDefault, // 默認鍵盤&#xff1a;支持所有字符 UIKeyboardTypeASCIICapable, // 支持ASCII的默認鍵盤 UIKeyboardTypeNu…

MySQL Hardware--FIO壓測

FIO參數 filename/export/1.txt 支持文件系統或者裸設備&#xff0c;-filename/dev/sda2或-filename/dev/sdb direct1 測試過程繞過機器自帶的buffer&#xff0c;使測試結果更真實 rwrandwread 測試隨機讀的I/O rwrandwrite 測試隨機…

Node — 第四天(Promise與路由)

Promise - ES6新對象 Promise能夠處理異步程序。 回調地獄 JS中或node中&#xff0c;都大量的使用了回調函數進行異步操作&#xff0c;而異步操作什么時候返回結果是不可控的&#xff0c;如果我們希望幾個異步請求按照順序來執行&#xff0c;那么就需要將這些異步操作嵌套起來…

xcode8 升級后注釋快捷鍵不能使用的解決方法

一種說法&#xff1a; 這個是因為蘋果解決xcode ghost。把插件屏蔽了。解決方法 命令運行&#xff1a; sudo /usr/libexec/xpccachectl 然后必須重啟電腦后生效 還有一種說法&#xff1a;不用指令直接重啟就可以了。

winform datagridview控件使用

最近做項目時&#xff0c;顯示查詢結果總需要綁定到datagridview控件上顯示&#xff0c;總結了給datagridview綁定數據的方式&#xff0c;以及導出datagridview數據到excel表格&#xff0c;如有錯誤請多指教 1.直接綁定數據源&#xff0c;可以綁定的數據格式有List<T>,Da…