Vue.js之常用指令

来源:https://www.cnblogs.com/zycorn/archive/2018/11/14/9960464.html
-Advertisement-
Play Games

vue常用指令 vue.js官方給自己的定義是數據模板引擎,並給出了一套渲染數據的指令.本文詳細介紹vue.js的常用指令. 官網:點我 一.v-text、v-html v-text:用於綁定文本 v-html:用於綁定html 1.{{Name}}這種寫法和v-text的作用是相同的,用於綁定標簽 ...


vue常用指令

vue.js官方給自己的定義是數據模板引擎,並給出了一套渲染數據的指令.本文詳細介紹vue.js的常用指令.

官網:點我

一.v-text、v-html

v-text:用於綁定文本

v-html:用於綁定html

<div id="app">
    <p>姓名:<label v-text="Name"></label></p>
    <p>姓名:{{Name}}</p>
    <div v-html="Age">年齡:</div>
</div>
<script>
    new Vue({
        el: "#app",
        data: {
            Name:"corn",
            Age:"<label>20</label>"
        }
    })
</script>
=======================>
姓名:corn
姓名:corn
20
  • 1.{{Name}}這種寫法和v-text的作用是相同的,用於綁定標簽的text屬性,如果標簽沒有text屬性,該綁定會失效,比如在一個文本框上面使用v-text時沒有效果的.
  • 2.從結果看出,v-html綁定後會覆蓋原來標簽標簽裡面的內容,此處是覆蓋,而並非append.
  • 3.對於v-html應用時要慎重,在網站上會動態渲染任意html有一定的危險存在,因此容易導致XSS跨站腳本攻擊.所以最好在新任的網址上面使用
  • 4.v-text和v-html綁定都是單向的,只能從Model到View的綁定,不能實現從View到Model的更新.

二.v-model指令

v-model實現雙向綁定,vue限定只能對錶單空間進行綁定,常見的由input,select,textarea等.

<div id="student">
    <p>編輯姓名:<input type="text" v-model="Name" /></p>
    <p>姓名:{{Name}}</p>
    <br>
        
    <p>編輯備註:<textarea v-model="Remark"></textarea></p>
    <p>備註:{{Remark}}</p>
    <br>
        
    <input type="checkbox" id="basketball" value="籃球" v-model="Hobby" />
    <label for="basketball">籃球</label>
    
    <input type="checkbox" id="football" value="足球" v-model="Hobby"/>
    <label for="football">足球</label>
    
    <input type="checkbox" id="running" value="跑步" v-model="Hobby"/>
    <label for="running">跑步</label>
    
    <br>
    <p>學生愛好:{{Hobby}}</p>
    
    <p>戶籍:{{Huji}}</p>
    <select class="form-control" v-model="Huji">
        <option>北京</option>
        <option>新疆</option>
        <option>甘肅</option>
    </select>
</div>

<script>
    //Model
    let data = {
            Name:"Wangxc",
            Age:20,
            Hobby:[],
            Remark:"優秀",
            Huji:""
        }
    //viewModel
    let vm = new Vue({
        el:"#student",
        data:data,
    });
</script>

三.v-if v-else-if v-else指令

v-if和v-else在使用條件運算符判斷時常用,需要說明的是,v-if可以單獨使用,但是v-else的前面必須有一個v-if的條件或者v-show指令.這裡的v-else可以不寫,experssion表達式是一個返回bool類型的屬性或者表達式.v-else-if的意思相當於python中的elif,否則如果.

<div id="app">
    <p>姓名:<label v-text="Name"></label></p>
    <p>是否已婚:<span v-if="IsMarry"></span><span v-else></span></p>
    <p>大人or小孩:<span v-if="Age>18">大人</span><span v-else>小孩</span></p>
    <p>單位:{{School}}</p>
</div>

<script>
    let data={
        Name:"corn",
        IsMarry:false,
        Age:21,
        School:"oldboy''",                
    }
    //ViewModel
    let vm = new Vue({
        el:"#app",
        data:data,
    });
</script>

//--------->
姓名:corn
是否已婚:否
大人or小孩:大人
單位:oldboy

四.v-show指令

v-show指令表示根據表達式的bool值來決定是否顯示該元素。如果bool是false,對應的dom標簽還是會渲染到頁面上,只是css的display設為none而已,而如果用v-if,bool值為false時整個dom樹都不會被渲染到頁面上。從這點來說,如果需求是需要經常切換元素的顯示和隱藏,使用v-shew效率更高,而如果只做 一次條件判斷,則使用v-if更加合適。

v-show常和v-else 一起使用,表示如果v-show條件滿足則顯示當前標簽,否則顯示v-else標簽。

<div id="app">
    <p>姓名:<label v-text="Name"></label></p>
    <p>是否已婚:<span v-show="IsMarry"></span></p>
</div>

<script>
    let data = {
        Name:"corn",
        IsMarry:false,
    }
    let vm = new Vue({
        el:"#app",
        data:data,
    });
</script>

//----------->
姓名:corn
是否已婚:

五.v-for指令

v-for指令需要以item in items 形式的特殊語法,常用來綁定數據對象。

<div id="app">
    <ul>
        <li v-for="value in nums">{{value}}</li>
    </ul>
</div>

<script>
    let vm = new Vue({
        el:"#app",
        data:{
            nums:[1,2,3,4,5]
        }
    });
</script>

//-------------->
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>

除基礎數據之外,還支持json數組的綁定:

<div id="array">
    <ul>
        <li v-for="item in items">姓名:{{item.Name}},年齡:{{item.Age}}</li>
    </ul>
</div>

<script>
    let vue = new Vue({
        el:"#array",
        data:{
            items:[
                {
                    Name:"呵呵",
                    Age:20
                },
                {
                    Name:"蟲蟲",
                    Age:25
                }
            ]
        }
    });
</script>

//---------->
姓名:呵呵,年齡:20
姓名:蟲蟲,年齡:25

在v-for裡面,可以使用<template>標簽渲染多個元素塊,下麵基於bootstrap樣式使用v-for、v-if、v-else等實現一個簡單的demo.

<style>
    #myPage li{float:left;list-style:none;padding:6px 10px;border:1px solid #ddd;border-left:0px;}
    #myPage li:first-child{border-left:1px solid #ddd;border-radius:6px 0 0 6px;}
    #myPage li:last-child{border-radius:0 6px 6px 0;}
    #myPage li a{color:#0081cc;text-decoration:none;}
    #myPage li.disabled a{color:#999;}
    #myPage li.active{background:#0081cc}
    #myPage li.active a{color:#fff;}            
</style>

<div id="myPage">
    <nav>
        <ul>
            <template v-for="page in pages">
                <li v-if="page==1" class="disabled"><a href="#">上一頁</a></li>
                <li v-if="page==1" class="active"><a href="#">{{page}}</a></li>
                <li v-else><a href="#">{{page}}</a></li>
                <li v-if="page==pages"><a href="#">下一頁</a></li>
            </template>
        </ul>
    </nav>
</div>

<script>
    let myPage = new Vue({
        el:"#myPage",
        data:{
            pages:10
        }
    });
</script>

實現效果:

v-for指令除了支持數據對象的迭代以外,還支持普通json對象的迭代,如:

<div id="list">
    <ul>
        <li v-for="(item,key) in items">{{key}}:{{item}}</li>
        <li v-for="(item,key,index) in items">{{index}}.{{key}}:{{item}}</li>
    </ul>
</div>

<script>
    let list = new Vue({
        el:"#list",
        data:{
            items:{Name:"corn",Age:21,Company:"oldboy"}
        }
    });
</script>


//------------------->
Name:corn
Age:21
Company:oldboy
0.Name:corn
1.Age:21
2.Company:oldboy

六.v-once指令

v-once表示只渲染元素和組件一次。隨後的重新渲染,元素/組件及其所有的子節點將被視為靜態內容並跳過。什麼意思呢?來看demo:

<div id="app">
    <p>姓名:<label v-once v-text="Name"></label></p>
    <p v-once>年齡:{{Age}}</p>
    <p>學校:{{School}}</p>
</div>

<script>
    let data = {
        Name:"小明",
        Age:18,
        School:"光明小學",
    }
    let vm = new Vue({
        el:"#app",
        data:data,
    });
</script>

從demo看出,只要使用v-once指令的,View和Model之間除了初次渲染同步,之後便不再同步,而同一次綁定裡面沒使用v-once指令的還是會繼續同步。

七.v-bind指令

對於html標簽的text、value等屬性,Vue裡面提供了v-text、v-model去綁定。但是對於除此之外的其他屬性呢,這就要用到接下來要說的v-bind指令了。v-bind的作用是綁定除了text、value之外的其他html標簽屬性,常見的比如class、style、自定義標簽的自定義屬性等。

<div id="app">
    <p>姓名:<label v-text="Name"></label></p>
    <p>是否女性:<span class="classSex" v-bind:class="{backred:IsBack}"><label v-if="IsBack"></label></span></p>
    <p>崗位等級:<span v-bind:style="{color:level}">aa</span></p>
</div>

<script>
   let data = {
        Name:"corn",
        Age:21,
        level:"red",
        IsBack:true
    }
    let vm = new Vue({
        el:"#app",
        data:data,
    })
</script>


//--------------------->
姓名:Wangxc

是否男性:是

崗位等級:aa

需要說明的是同一個標簽裡面的同一個屬性,可以既有綁定的寫法,也有靜態的寫法,組件會自動幫你合併,比如上文中的class屬性。

八.v-on指令

在vue中v-on指令用來綁定標簽的事件,語法和v-bind類似。

v-on:event="expression",這裡的event可以是js里的常用事件,也可以是自定義的事件。

<div id="app">
    <p>姓名:<label v-text="Name"></label></p>
    <p>年齡:{{Age}}</p>
    <botton v-on:click="Age++;if(Name=='Wangxc')Name='hehe';else Name='Wangxc';">增加年齡</botton>
</div>

<script>
    let vm = new Vue({
        el:"#app",
        data:{
            Name:"corn",
            Age:"21"
            }
        });
</script>

//------------>
這段代碼是一個最簡單的應用,直接在click事件裡面執行邏輯,改變變數的值。

除了直接在標簽內寫處理邏輯,還可以定義方法事件處理器:

<div id="clickEvent">
    <p>姓名:<label v-text="Name"></label></p>
    <p>年齡:{{Age}}</p>
    <botton v-on:click="Hello">Hello</botton>
</div>

<script>
      let clickEvent = new Vue({
        el:"#clickEvent",
        data:{
            Name:"corn",
            Age:"21"
        },
        methods:{
            Hello:function(){
                console.log("Hello " + this.Name + "!");
                this.Age++
            }
        }
    });
</script>

九,實現增刪改查

<div id="app">
    <div>用戶管理</div>
    <table>
        <thead>
            <tr>
                <th>用戶名</th>
                <th>年齡</th>
                <th>畢業學校</th>
                <th>備註</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <template v-for="row in rows">
                <tr>
                    <td>{{row.Name}}</td>
                    <td>{{row.Age}}</td>
                    <td>{{row.School}}</td>
                    <td>{{row.Remark}}</td>
                    <td><a href="#" @click="Edit(row)">編輯</a>&nbs

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

-Advertisement-
Play Games
更多相關文章
  • 現階段大數據如火如荼,很多人想要學習大數據,但是卻不瞭解大數據,也不知道該從哪開始學起的同學,希望這篇文章能夠幫到你們。 1. Linux基礎和JavaSE基礎【包含mysql】 這些是基本功,剛開始也不可能學的很精通,最起碼要對linux中的一些基本的命令混個臉熟,後面學習各種框架的時候都會用到, ...
  • 假設當前是第PageNo頁,每頁有PageSize條記錄,現在分別用Mysql、Oracle和SQL Server分頁查詢student表。 1、Mysql的分頁查詢: 理解:(Limit n,m) =>從第n行開始取m條記錄,n從0開始算。 2、Oracel的分頁查詢: 理解:假設pageNo = ...
  • ListView與RecyclerView在在app應用非常廣泛,相對於其他的view(button textview)來說比較複雜,接下來我將講一下創建的流程以及兩者的不同。 代碼來自《第一行代碼》 秋天到了,果園大豐收了,現在著急的事情,就是把水果收集好放進倉庫里。 ListView 1. 首先 ...
  • Android XBanner使用詳解 2018年03月14日 08:19:59 AND_Devil 閱讀數:910 Android XBanner使用詳解 2018年03月14日 08:19:59 AND_Devil 閱讀數:910 Android XBanner使用詳解 Android XBan ...
  • 應用場景是:用Hbuilder打包app,在app中點擊微信授權登錄或者某一操作,調起微信授權登錄,用戶授權後拿到用戶信息。 一、登錄插件配置 先配置微信登錄參數 appid和appsecret,在manifest.json 文件中選擇SDK配置,登錄鑒權 勾選微信登錄,填入在開放平臺申請的app參 ...
  • 前言 經過了兩年多終於完成了這本書,2016年9月份開始寫的,到今天為止2年零2個月,本書的內容大部分是去年完成的,看過我去年總結的讀者可能知道,去年事情很多太忙了,導致本命年這本書沒有上架(有點小小的遺憾)。 工作之餘喜歡寫寫技術文章,對自己的技術做一個總結同時也讓後來者站在我的肩膀上,之前一直在 ...
  • function ajax(method,url,data,fn){ // 1、創建對象 var xhr=null; try{ xhr=new XMLHttpRequest(); }catch(e){ xhr=new ActiveXObject("Microsoft.XMLHTTP"); } // ... ...
  • 小橋 流水 人家 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...