1. 程式人生 > 實用技巧 >MyBatis Plus陣列list存入資料庫

MyBatis Plus陣列list存入資料庫

1.Vue模板語法

1.1 模板語法概述

1.如何理解前端渲染?

把資料填充到HTML標籤中

2.前端渲染方式

  • 原生js拼接字串

  • 使用前端模板引擎

  • 使用vue特有的模板語法

3. 原生js拼接字串

基本上就是將資料以字串的方式拼接到HTML標 籤中,前端程式碼風格大體上如下圖所示。

缺點:不同開發人員的程式碼風格差別很大,隨著業 務的複雜,後期的維護變得逐漸困難起來。

4. 使用前端模板引擎

下面程式碼是基於模板引擎art-template的一段代 碼,與拼接字串相比,程式碼明顯規範了很多, 它擁有自己的一套模板語法規則。

優點:大家都遵循同樣的規則寫程式碼,程式碼可讀性 明顯提高了,方便後期的維護。

缺點:沒有專門提供事件機制。

5. 模板語法概覽

插值表示式

指令

事件繫結

屬性繫結

樣式繫結

分支迴圈結構

1.2 指令

1.什麼是指令?

  • 什麼是自定義屬性

  • 指令的本質就是自定義屬性

  • 指令的格式:以v-開始(比如:v-cloak)

官網:https://cn.vuejs.org/v2/api/

2. v-cloak指令用法

插值表示式存在的問題:“閃動”

如何解決該問題:使用v-cloak指令

解決該問題的原理:先隱藏,替換好值之後再顯示最終的值

// v-cloak指令 的用法
        /*  1. 提供樣式
         [v - cloak] {
             display: none
         } 
         <style>
            [v-cloak] {
              display: none
            }
        </style>
         
*/ // 2. 在插值表示式所在的標籤中新增 v-cloak 指令 <div v-cloak> {{msg}} </div>

3.資料繫結指令

v-text 填充純文字

① 相比插值表示式更加簡潔

<div v-text='msg'></div>

v-html 填充HTML片段

① 存在安全問題

② 本網站內部資料可以使用,來自第三方的資料不可以用

<divv-html='msg1'></div>
data: {
msg1: '<h3> html </h3>'
}

v-pre 填充原始資訊

① 顯示原始資訊,跳過編譯過程(分析編譯過程)

<div v-pre='msg'>{{msg}} </div>
  1. 資料響應式

    如何理解響應式

① html5中的響應式(螢幕尺寸的變化導致樣式的變化)

② 資料的響應式(資料的變化導致頁面內容的變化,可在控制檯控制資料)

什麼是資料繫結

① 資料繫結:將資料填充到標籤中

v-once 只編譯一次

① 顯示內容之後不再具有響應式功能

​ v-once的應用場景:如果顯示的資訊後續不需要再修改,那麼可以使用v-once,這樣可以提高效能。

1.3 雙向資料繫結指令

1.什麼是雙向資料繫結?

2.雙向資料繫結分析

v-model指令用法

<input type='text' v-model='uname'/>

在頁面中修改資料,控制檯裡面的資料也會跟著變化

在控制檯裡面修改資料,頁面資料也會一起被修改

3.MVVM設計思想

① M(model) --(模型資料)

② V(view) --(檢視,本質上來說是DOM元素)

③ VM(View-Model)--(控制邏輯,把View和Model結合在一起)

1.4 事件繫結

1.Vue如何處理事件?

v-on指令用法

 <button v-on:click='num++'>按鈕</button>

v-on簡寫形式

<button @click='num++'>按鈕</button>

2.事件函式的呼叫方式

函式定義方式:

直接繫結函式(方法)名稱

<button @click='handle'>按鈕2</button>

呼叫函式

<button @click='handle()'>按鈕3</button>

3.事件函式引數傳遞

普通引數和事件物件

  1. 如果事件直接繫結函式名稱,那麼會預設傳遞事件物件作為事件函式的第一個引數

     <button @click='handle2'>按鈕2</button>
    handle2: function (event) {
         console.log(event.target.innerHTML);
     }

    1. 如果事件繫結函式呼叫,那麼事件物件必須作為最後一個傳遞的引數,並且事件物件的名稱必須是$event,是固定的

      <button @click='handle1(1,6,$event)'>按鈕1</button>
       handle1: function (p1, p2, event) {
               console.log(p1, p2);
               // tagName 標籤名    
               console.log(event.target.tagName);
               // innerHTML 標籤裡的內容
               console.log(event.target.innerHTML);
               this.num++;
       }

4.事件修飾符

.stop 阻止冒泡

1.傳統方式阻止冒泡

handle1: function () {
// 傳統方式阻止冒泡
event.stopPropagation();
}

2.事件修飾符阻止冒泡

<button @click.stop='handle1'>按鈕1</button>

.prevent 阻止預設行為

1.傳統方式阻止預設行為

 handle3: function (event) {
// 傳統方式阻止預設行為
event.preventDefault();
}

2.事件修飾符阻止冒泡

<a href="http://www.baidu.com" @click.prevent='handle3'>跳轉</a>

.stop .prevent 可串聯使用

 <!-- 阻止冒泡和阻止預設行為可串聯使用 -->
<button @click.stop.prevent='handle1'> <a href="http://www.baidu.com">跳轉按鈕</a></button>

5.按鍵修飾符

.enter 回車鍵 .delete刪除鍵

// .enter 回車鍵
密碼: <input type="password" v-model='pwd' v-on:keyup.enter='handel'>
// .delete刪除鍵
使用者名稱:<input type="text" v-model='uname' v-on:keyup.delete='clearContent'><script>
        var vm = new Vue({
            el: '#app',
            data: {
                uname: '',
                pwd: ''
            },
            methods: {
                clearContent: function () {
                    this.uname = ''
                },
                handel: function () {
                    console.log(this.uname, this.pwd);
                }
            }
        })
    </script>


6.自定義按鍵修飾符

全域性 config.keyCodes 物件

Vue.config.keyCodes.f1 = 112

<body>
    <div id="app">
        <!-- 未知Ascll碼值,新增事件物件$event,用來獲取鍵盤Ascll碼值 -->
        <!-- <input type="text" v-on:keyup='handel'> -->
        <!-- 已知ASCALL碼值也可以如下直接新增數字 -->
        <!-- <input type="text" v-on:keyup.65='handel'> -->
        <input type="text" v-on:keyup.f1='handel'>
    </div>
    <script src="vue.js"></script>
    <script>
        // 已知Ascall碼值  f1為自定義修飾符別名 
        Vue.config.keyCodes.f1 = 65;
        var vm =new Vue({
            el: '#app',
            data: {},
            methods: {
                handel: function (event) {
                    //Ascll碼值打印出來
                    console.log(event.keyCode);
                }
            }
        })
    </script>
</body>

案例:簡單計算器

需求:實現簡單的加法計算,分別輸入數值a和數值b,點選計算按鈕,結果顯示在下面。

案例分析:

① 通過v-model指令實現數值a和數值b的繫結

② 給計算按鈕繫結事件,實現計算邏輯

③ 將計算結果繫結到對應位置

<body>
    <div id="app">
        <h1>簡單計算器</h1>
        <div>
            <span>數值A</span>
            <span>
                <input type="text" v-model='a'>
            </span>
        </div>
        <div>
            <span>數值B</span>
            <span>
                <input type="text" v-model='b'>
            </span>
        </div>
        <div>
            <button v-on:click='handel'>計算</button>
        </div>
        <div>
            <span>計算結果:</span>
            <span v-text='result'></span>
        </div>
    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                a: '',
                b: '',
                result: ''
            },
            methods: {
                handel: function () {
                    this.result = parseInt(this.a) + parseInt(this.b);
                }
            }
        })
    </script>
</body>
​

1.5 屬性繫結

1.Vue如何動態處理屬性?

v-bind指令用法:

<a v-bind:href="url">百度</a>

縮寫形式

<a :href="url">百度</a>

2.v-model的低層實現原理分析

<input type="text" v-bind:value="msg" v-on:input='msg=$event.target.value'>

1.6 樣式繫結

1.class樣式處理

物件語法

<body>
    <div id="app">
        <div v-bind:class="{active:isActive,error:isError}">123</div>
        <button v-on:click='handel'>切換</button>
    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                isActive: true,
                isError: true
            },
            methods: {
                handel: function () {
                    // 控制isActive的值在true和false之間進行切換
                    this.isActive = !this.isActive,
                        this.isError = !this.isError
                }
            }
        })
    </script>

陣列語法

<body>
    <div id="app">
        <div v-bind:class='[activeClass,errorClass]'>1213</div>
        <button v-on:click='handle'>切換</button>
    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                activeClass: 'active',
                errorClass: 'error'
            },
            methods: {
                handle: function () {
                    this.activeClass = '',
                        this.errorClass = ''
                }
            }
        })
    </script>
</body>

樣式處理細節

1、物件繫結和陣列繫結可以結合使用

<div v-bind:class='[activeClass,errorClass,{text:isText}]'>1213</div>

2、class繫結的值可以簡化操作

<div v-bind:class='arrClass'></div>
<div v-bind:class='objClass'></div>
            data: {
                activeClass: 'active',
                errorClass: 'error',
                isText: true,
                // 簡化操作
                // 陣列簡化
                arrClass: ['active', 'error'],
                // 物件簡化
                objClass: {
                    active: true,
                    error: true
                }
            }

3、預設的class如何處理?預設的class會保留

<div class="base" v-bind:class='objClass'></div>

2.style樣式處理

物件語法

 <div v-bind:style='{width:widthStyle,height:heightStyle,border:borderStyle}'></div>

陣列語法

<div v-bind:style='[objStyle,overrideStyle]'></div>

具體使用參考如下程式碼:

<body>
    <div id="app">
        <div v-bind:style='{width:widthStyle,height:heightStyle,border:borderStyle}'></div>
        <div v-bind:style='objStyle'></div>
        <div v-bind:style='[objStyle,overrideStyle]'></div>
        <button v-on:click.style='handel'>切換</button>
    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                widthStyle: '100px',
                heightStyle: '200px',
                borderStyle: '1px solid #ccc',
                // 物件簡化
                objStyle: {
                    width: '200px',
                    height: '100px',
                    border: '1px solid #ccc'
                },
                // 陣列
                overrideStyle: {
                    border: '5px solid red',
                    background: 'blue'
​
                }
            },
            methods: {
                handel: function () {
                    this.heightStyle = '100px';
                    this.objStyle.width = '100px'
                }
            }
        })
    </script>
</body>

1.7 分支迴圈結構

1.分支結構

v-if

v-else

v-else-if

v-show

<body>
    <div id="app">
        <div v-if='score>=90'>優秀</div>
        <div v-else-if='score<90&&score>=80'>良好</div>
        <div v-else-if='score<80&&score>=70'>中等</div>
        <div v-else-if='score<90&&score>=60'>及格</div>
        <div v-else>掛科</div>
        <div v-show=flag>測試v-show</div>
        <button v-on:click='handel'>切換狀態</button>
    </div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                score: 53,
                flag: false
            },
            methods: {
                handel: function () {
                    this.flag = !this.flag
                }
            }
        })
    </script>
</body>

2.v-if與v-show的區別

v-if控制元素是否渲染到頁面 (基本上不會發生改動用v-if)

v-show控制元素是否顯示(已經渲染到了頁面,頻繁改動用v-show)

3.迴圈結構

v-for遍歷陣列

<div v-text='item' v-for='item in fruits'></div>
<div v-for='(item,index) in fruits'>{{item + ' ---' + index}}</div>

key的作用:幫助Vue區分不同的元素,從而提高效能

<div :key='item.id' v-for='(item,index) in list'>{{item}} + '---' {{index}}</div>

示例程式碼:

<body>
    <div id="app">
        <div v-text='item' v-for='item in fruits'></div>
        <div v-for='(item,index) in fruits'>{{item + ' ---' + index}}</div>
        <div :key='item.id' v-for='item in myFruits'>
            <span>{{item.ename}}</span>
            <span>---</span>
            <span>{{item.cname}}</span>
        </div>
</div>
    <script src="vue.js"></script>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                fruits: ['banner', 'orange', 'apple'],
                myFruits: [{
                        id: 1,
                        ename: 'banana',
                        cname: '香蕉'
                    },
                    {
                        id: 2,
                        ename: 'apple',
                        cname: '蘋果'
                    }, {
                        id: 3,
                        ename: 'orange',
                        cname: '橙子'
                    }
                ]
            },
            methods: {
​
            }
        })
    </script>
</body>