第五節(jié):Vue指令:基本認識使用/v-text/v-html/v-cloak/v-once/v-pre

認識vue指令

vue的指令directive只是dom的行間屬性,vue給這類屬性賦予了一定的意義, 來實現(xiàn)特殊的功能,所有的指令都以v-開頭

指令的職責是,當表達式的值改變時,將其產生的連帶影響,響應式地作用于 DOM甥郑。

那么接下來我們好好看看Vue給我們提供了那些指令


1. v-text 指令

1.1 v-text指令的基本用法
  1. v-text 能展示對應data中數(shù)據(jù)內容脱拼,也能在數(shù)據(jù)基礎上做運算
  2. v-text 會把標簽中的內容替換,類似于innerText
<div id="app">
    <!-- 將data 中的數(shù)據(jù)渲染在頁面上-->
    <div v-text='msg'></div>

    <!-- v-text可以對data數(shù)據(jù)內容做簡單的運算-->
    <div v-text='msg + "world"'></div>

</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg:"hello"
        }
    })
</script>

注意指令(屬性)的值雖然加了引號, 但是引號內不是字符串,而是表達式, msg是表達式中的變量,如果需要在表達式中使用字符串,需要再次添加引號, 但是要注意引號的沖突

所以第二個div的v-text指令是變量msg和字符串world做了一個簡單的字符串拼接

顯示結果:

v-text.png


1.2 v-text指令覆蓋標簽嵌套內容

我們有講到v-text指令有點類似于innerText,所以在使用v-text指令的標簽內不要添加任何內容, 因為會被覆蓋,
示例如下:

<div id="app">
    <!-- 使用v-text標簽中不能添加內容,會被覆蓋 -->
    <!-- 使用v-text指令標簽中添加普通字符 -->
    <div v-text='msg'>
        你好! 中國
    </div>

    <!-- 使用v-text指令標簽中添加標簽 -->
    <div v-text='msg +" " + "world"'>
        <h2>我就是一個標題</h2>
    </div>

</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg:"hello"
        }
    })
</script>

顯示結果

v-text2.png

通過示例,發(fā)現(xiàn)使用v-text標簽內的數(shù)據(jù)全被覆蓋了

v-text可以取代{{}} 它也有不好的地方就是會替換標簽內的所有的內容,無論普通字符還是標簽

Mustache語法只會在指定的地方編譯內容


2. v-cloak 指令

{{}}這種插值符號在頁面刷新的時候,會出現(xiàn)在頁面上, {{}}插值表達式會閃爍,

v-cloak 解決閃爍(塊)問題

2.1 v-cloak 指令的使用

第一步要給元素添加v-cloak

<div v-cloak></div>

第二步: 手動的給這個元素添加display:none;

[v-cloak]{
    display:none;
}

了解一下,后期用不到


3.v-html 指令

雙大括號會將數(shù)據(jù)解釋為普通文本,而非 HTML 代碼双戳。為了輸出真正的 HTML抛人,你需要使用 v-html 指令:

3.1 v-html指令的基本使用

把html字符串當成html渲染.類似于innerHTML

<div id="app">
    <!-- v-text無法解析數(shù)據(jù)中的標簽 -->
    <div v-text="msg"></div>

    <!-- v-html可以解析數(shù)據(jù)中的標簽 -->
    <div v-html="msg"></div>

</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg:"<h2>hello wrold</h2>"
        }
    })
</script>

顯示結果

v-html.png

通過示例結果, 我們發(fā)現(xiàn)紅色使用v-text指令的div并沒有解析出數(shù)據(jù)中的h2標簽

藍色使用v-html指令的div,將數(shù)據(jù)中的h2解析成了標簽

但是一定要注意,v-html指令一定要慎用, 可能會攻擊,如果在數(shù)據(jù)里添加一個script標簽也能識別,那么script里面就可能會添加攻擊你的腳本.

所以如果要使用v-html指令,一定要是可信任的.不信任的會有問題


3.2 總結三種將數(shù)據(jù)渲染的頁面的方法
  1. 雖然上面三種方法都可以將數(shù)據(jù)渲染到頁面上弛姜,但是工作中我最常用的是{{}}
  2. {{}} 最被常用但是在加載的時候會出現(xiàn)閃爍問題(指令篇章v-cloak會講解解決方法),無法將html格式數(shù)據(jù)渲染妖枚,只能當字符串展示
  3. v-text 雖然沒有數(shù)據(jù)加載閃爍問題廷臼,但是會將標簽中間的數(shù)據(jù)覆蓋,也不能渲染html格式數(shù)據(jù)。
  4. v-html 謹慎使用會出現(xiàn)xss攻擊的風險


4.v-once指令,

平時我們使用Mustache語法,包括v-text,v-html指令渲染的頁面都是具有響應式的, 當數(shù)據(jù)發(fā)生變化, 視圖也會跟著改變

v-once屬性不用設置值,使用{{}}插值符號插值,v-once值得是只會初始化插值一次;當數(shù)據(jù)發(fā)生變化是,頁面視圖不會發(fā)生改變

<div id="app">
    <!-- 使用v-once指令 -->
    <div v-once>{{msg}}</div>

    <!-- 未使用v-once指令 -->
    <div>{{msg}}</div>
</div>

<script>
    const vm = new Vue({
        el: "#app",
        data: {
            msg: 'hello wrold'
        }
    })

    //  就是3秒以后  數(shù)據(jù)發(fā)生了變化,頁面視圖也不會有任何改變,
    setTimeout(() => {
        vm.msg = "你好 "
    }, 3000)
</script>

示例在開始時,兩個div顯示的都是hello wrold,

但是3秒鐘以后顯示的結果如下

v-once.png

我們會發(fā)現(xiàn)未使用v-once指令的div在數(shù)據(jù)發(fā)生變化以后, 頁面顯示的結果也跟隨數(shù)據(jù)發(fā)生了變化,但是使用了v-once指令的div只會在初始化的時候顯示,顯示之后就不會再隨著頁面的變化而變化了


5. v-pre指令

不編譯指令,這個指令不需要表達式

用法

跳過這個元素和它的子元素的編譯過程荠商〖盘瘢可以用來顯示原始 Mustache 標簽。跳過大量沒有指令的節(jié)點會加快編譯结啼。

示例:

正常編譯示例

<div id="app">
   <span>{{ msg }}</span>
</div>

<script>
   var vm = new Vue({
       el: '#app',
       data: {
           msg:"hello world"
       }
   })
</script>

顯示結果:

非v-pre.png

使用v-pre指令

<div id="app">
    <!-- v-pre指令不需要值 -->
    <span v-pre>{{ msg }}</span>
</div>

<script>
    var vm = new Vue({
        el: '#app',
        data: {
            msg:"hello world"
        }
    })
</script>

顯示結果:

v-pre指令.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末掠剑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子郊愧,更是在濱河造成了極大的恐慌,老刑警劉巖井佑,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件属铁,死亡現(xiàn)場離奇詭異,居然都是意外死亡躬翁,警方通過查閱死者的電腦和手機焦蘑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盒发,“玉大人例嘱,你說我怎么就攤上這事∧ⅲ” “怎么了拼卵?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛮艰。 經(jīng)常有香客問我腋腮,道長,這世上最難降的妖魔是什么壤蚜? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任即寡,我火速辦了婚禮,結果婚禮上袜刷,老公的妹妹穿的比我還像新娘聪富。我一直安慰自己,他們只是感情好著蟹,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布墩蔓。 她就那樣靜靜地躺著,像睡著了一般草则。 火紅的嫁衣襯著肌膚如雪钢拧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天炕横,我揣著相機與錄音源内,去河邊找鬼。 笑死,一個胖子當著我的面吹牛膜钓,可吹牛的內容都是我干的嗽交。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼颂斜,長吁一口氣:“原來是場噩夢啊……” “哼夫壁!你這毒婦竟也來了?” 一聲冷哼從身側響起沃疮,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤盒让,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后司蔬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邑茄,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年俊啼,在試婚紗的時候發(fā)現(xiàn)自己被綠了肺缕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡授帕,死狀恐怖同木,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情跛十,我是刑警寧澤彤路,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站偶器,受9級特大地震影響斩萌,放射性物質發(fā)生泄漏。R本人自食惡果不足惜屏轰,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一颊郎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧霎苗,春花似錦姆吭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厘擂,卻和暖如春昆淡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刽严。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工昂灵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓眨补,卻偏偏與公主長得像管削,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撑螺,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348