1. 程式人生 > >Vue.js 創建一個 CNODE 社區(3)

Vue.js 創建一個 CNODE 社區(3)

dem bin input元素 prev 可選 lac 頁面 return 數組長度

Vue 中的內置指令 demo

通過 demo 了解 Vue 中一些常用的內置指令。

涉及到 v-cloack / v-once / 條件循環指令(v-if / v-else-if / v-else) / v-show / 列表遍歷渲染 (v-for) / 數組更新、過濾排序 / 方法和事件 (修飾符) 等...

以下是全部的 demo:

JSbin


v-cloak

作用:解決初始化慢導致頁面閃動的最佳實踐(初始化慢時會顯示未渲染好的頁面,而 v-cloak 則讓沒有渲染好的部分隱藏起來,渲染好之後再去掉 v-cloak,讓頁面正常顯示)

常與 display:none 搭配

<style>
    [v-cloak]{
        display:none;
    }
</style>
<div v-cloak>{{ msg }}</div>

v-once

作用:定義它的元素和組件只渲染一次

<div v-once>{{ msg }}</div>

v--if / v--else-if / v--else

條件循環指令:

<div v-if=‘isActive‘>{{ msg }}</div>
<div v-else-if=‘6>3‘>{{ oncedata }}</div>
<div v-else>如果前面兩個都是 false,那就顯示這個</div>
<button @click=‘changeMsg‘>點我切換</button>

JS:

data:{
    msg:‘this‘,
    oncedata:‘is‘,
    isActive:true
},
methods:{
    changeMsg:function(){
        this.isActive = !this.isActive
    }
}

v-if的弊端 :
Vue 在渲染元素時 ,出於效率考慮,會盡可能地復用已有的元素而非重新渲染, 因
此會出現烏龍
只會渲染變化的元素,也就是說,input元素被復用了

解決方法:提供key值可以來決定是否復用該元素

<div v-if=‘type==="name"‘>
    用戶名 :<input type="text" placeholder="Username" key=‘username‘>
</div>
<div v-else>
    密碼 :<input type="text" placeholder="Password" key=‘password‘>
</div>
    <button @click=‘changeInput‘>點擊切換輸入欄</button>

JS:

data:{
    type:‘name‘
},
methods:{
    changeInput:function(){
        this.type = (this.type===‘name‘?‘password‘:‘name‘)
    }
}

v-show

作用:控制元素是否顯示

<div v-show=‘isActive‘>{{ msg }}</div>
data:{
    isActive:true
}

v-show 和 v-if 的區別

v-show 和 v-if 的作用同樣是控制元素的顯示,但是:

v-if 是將元素給移除,即 DOM 樹中並不會渲染這個元素

v-show 是將元素給隱藏,即 DOM 樹中渲染了這個元素,只是改變了 css 的 display 的屬性

v-for

列表渲染指令

  • 遍歷多個對象
<ul>
    <li v-for=‘item in objs‘>{{ item.name}}</li>
</ul>
data:{
    objs:[
        {name:‘Li‘},
        {name:‘Wang‘},
        {name:‘Chen‘}
    ]
}

添加索引:

<ul>
    <li v-for=‘(item,index) in objs‘>{{index}}-{{ item.name}}</li>
</ul>
  • 遍歷對象屬性

直接打印屬性的值:

<ul>
    <li v-for=‘value in obj‘>{{ value }}</li>
</ul>
data:{
    obj:{
        name:‘zhangsan‘,
        age:23,
        gender:‘male‘
    }
}

添加鍵和索引:

<ul>
    <li v-for=‘(value,key,index) in obj‘>{{ index }}-{{ key }}-{{ value }}</li>
</ul>

數組更新、過濾和排序

<ul>
    <li v-for=‘value in arr‘>{{ value }}</li>
</ul>
data:{
    arr:[213,345,3465,67,457,6,7,687,]
}
  • push() 在末尾添加元素
methods:{
    arrpush:function(){
        this.arr.push(2334)
    }
}
  • pop() 將數組的最後一個元素移除
methods:{
    arrpop:function(){
        this.arr.pop()
    }
}
  • shift() 刪除數組的第一個元素
methods:{
    arrshift:function(){
        this.arr.shift()
    }
}
  • unshift():在數組的第一個元素位置添加一個元素
methods:{
    arrunshift:function(){
        this.arr.unshift(234234)
    }
}
  • splice() :可以添加或者刪除函數—返回刪除的元素

這個方法接受三個參數:

第一個參數 表示開始操作的位置

第二個參數表示:要操作的長度

第三個為可選參數:

methods:{
    arrsplice:function(){
        this.arr.splice(1,1,2)
    }
}
// 操作數組的下標為 1 的數組成員之後的 1 個數組成員,把他的數值變為 2
  • sort() :排序
methods:{
    arrsort:function(){
        this.arr.sort(function(a,b){
            return a > b
        })
    }
}
// 數組成員由大到小排列
  • reverse()

數組翻轉

methods:{
    arrreverse:function(){
        this.arr.reverse()
    }
}

註意

兩個數組變動vue檢測不到:

  1. 改變數組的指定項

  2. 改變數組長度

解決方法:

set :

改變指定項: Vue.set(app.arr,1,”car”)

splice :

改變數組長度: app.arr.splice(1)


方法和事件

基本用法:

記得:如果方法中帶有參數,但是你沒有加括號,默認傳原生事件對象event

data:{
    cout:0
},
methods:{
    handle:function(cout){
        count = count || 1
        this.cout = this.cout + count
    }
}

html:

<button @click=‘handle(4)‘>點擊 +4</button>

修飾符:

多用於事件中:

  • stop 阻止事件向上冒泡

不然他會執行完點擊按鈕的事件後,繼續執行父元素的事件

正確做法:添加修飾符 stop:

<div @click=‘divClick‘ style=‘background-color:red;width:100px;height:100px‘>
    <button @click.stop=‘buttonClick‘>點擊就送</button>
</div>
  • prevent 提交事件並且不重載頁面

當我們頁面中有表單,點擊表單提交按鈕 submit 時,要阻止頁面重載:

<form action=‘‘ @submit.prevent=‘handle‘>
    <button type=‘submit‘>提交表單</button>
</form>
methods:function(){
    handle:function(){
        alert(‘不需重載頁面‘)
    }
}
  • self 只是作用在元素本身而非子元素的時候調用
<div @click.self=‘divClick‘ style=‘background-color:red;width:100px;height:100px‘>
    <button @click.stop=‘buttonClick‘>點擊就送</button>
</div>
  • once 只執行一次的方法
<div @click.once=‘changeNum‘>{{ num }}</div>
data:{
    num:0
}
methods:{
    changeNum:function(){
        this.num = this.num + 1
    }
}

還可以使用 enter 等方法監聽鍵盤事件:

<div @enter=‘xxx()‘>{{ num }}</div>

關於 Vue 的一些常用內置指令就整理到這裏了,等接觸到新的再添加~。

Vue.js 創建一個 CNODE 社區(3)