Vue 成長之旅 | Vue基礎(chǔ)用法一

一、Vue 基礎(chǔ)使用

<body>
  <div id="app">
      <p v-text="username"></p>
 </div>
</body>
 <script src="./vue.js"></script>
<script>
// 引用vue js框架后媒楼, 瀏覽器加載完畢vue 框架乐尊,window全局就有了一個Vue的構(gòu)造函數(shù)
// 創(chuàng)建Vue 實例對象
const vm = new Vue({
    // el屬性是固定的寫法,表示當前vm實例要控制頁面上的哪個區(qū)域划址,接收的值是一個選擇器
    el: '#app',
    data: {
        username: '張三'
    }
})
</script>

二 扔嵌、 Vue的指令與過濾器

1、指令的概念

指令: 是vue為開發(fā)者提供的模板語法 夺颤, 用于輔助開發(fā)者渲染頁面的基本結(jié)構(gòu)痢缎。

Vue中的指令按照不同的用途可以分為如下6大類:

1)、內(nèi)容渲染指令

內(nèi)容渲染指令用來輔助開發(fā)者渲染DOM元素的文本內(nèi)容 世澜, 常用的內(nèi)容渲染指令有如下3個:

1》 v-text;

// v-text 代表把變量值渲染到 標簽的內(nèi)容區(qū)域(會覆蓋標簽內(nèi)部內(nèi)容)
<div id="app" v-text="username"></div>
//  會覆蓋p標簽原有內(nèi)容
<p v-text="gender">性別</p>

2》{{ }} 插值表達式
Vue 提供的{{ }} 表達式 独旷, 只是內(nèi)容的占位符,不回覆蓋原有內(nèi)容寥裂。

// 只替換占位符的內(nèi)容
<p>性別:{{ gender }}</p>

// 插值表達式嵌洼,也支持javascript表達式的運算。
 {{ flag ? "YES":"NO"}}

3》v-html
可以把帶有標簽的字符串抚恒, 渲染成真正的 html

data: {
        username: '張三',
        gender : '女',
        info:'<div style=\'color:red\'>sssss</div>'
    }
// 會把文本內(nèi)容 咱台, 直接顯示成文本, 而不認識html標簽
<p v-text="info"></p>
// 會識別html 標簽俭驮,并識別
<p v-html="info"></p>

2)回溺、屬性綁定指令

插值表達式只能用于內(nèi)容節(jié)點中, 不能用于屬性節(jié)點中混萝。
如果要給某個屬性遗遵,動態(tài)綁定值,可用 v-bind 指令逸嘀,直接在某個屬性前面加v-bind: 即可车要。同時這個指令可以簡寫成 “:”
// 這兩種寫法都可以
<input v-bind:placeholder="tip"/>
<input :placeholder="tip"/>

屬性表達式里面, 也支持簡單的表達式運算
// 在data 中定義了 index變量崭倘,如果告訴vue 翼岁, 要查找一個叫 index的變量
// 如果在屬性綁定指令中类垫,運用表達式,則把固定的字符串用單引號括起來琅坡,然后用 + 拼接變量即可 悉患。 實例如下: 
<div :id="'id_'+index" :title="'id_'+index">aaaa</div>

3)、事件綁定指令

要想綁定事件榆俺,先在Vue構(gòu)造函數(shù)中售躁, 添加: methods 屬性,并在methods 對象中添加方法

const vm = new Vue({
    // el屬性是固定的寫法茴晋,表示當前vm實例要控制頁面上的哪個區(qū)域陪捷,接收的值是一個選擇器
    el: '#app',
    data: { count : 1 }
    methods:{
        // 這里可以使用簡寫的方式,去掉 :function 即可
        myclick :function(n) {
            // 這里vm 诺擅,可以使用this 替代市袖,即:this.count += n
            vm.count += n
        },
        myclick1 (n,e) {
            this.count += n
            if(this.count % 2 == 0){
                e.target.style = "background:red"
            }else{
                e.target.style = "background:yellow"
            }
            console.log("================",e)
        }
    }
})

// 然后在元素中 click 屬性綁定這個方法,也可以簡寫方式:
<button v-on:click="myclick(3)">click</button>
// 簡寫
<button @click="myclick(3)">click</button>

<!--vue 提供了一個內(nèi)置對象:$event , 代表的就是原生事件對象 , 如果不傳自定義參數(shù)烁涌,自帶了原生事件對象-->
<button @click="myclick1(1, $event)">click</button>
事件修飾符

在事件處理程序中調(diào)用 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求凌盯。
event.preventDefault() 這個是停止默認事件處理流程

//  阻止單擊事件繼續(xù)傳播 
<a v-on:click.stop="doThis"></a>
// 提交事件不再重載頁面 ,
<form v-on:submit.prevent="onSubmit"></form>

4)烹玉、雙向綁定指令

示例
<p>用戶名:{{ username }}</p>
// 通過v-model 指令進行雙向綁定 , v-model 在底層監(jiān)聽的就是value屬性
<input v-model="username" />
// 通過v-bind 屬性綁定阐滩, 也可以顯示數(shù)據(jù)二打,但是當input內(nèi)容變化時,變量不會變化
<input :value="username"/>
// 通常情況下掂榔,可以用 v-model 替換 v-bind:value
v-model 修飾符
v-model.number
<input type="text" v-model.number="n1"/> +  <input type="text" v-model="n2"/> = <span>{{n1 + n2}}</span>
// 如果不做限制继效,input 可以輸入任意字符串,有時候我們只允許用戶輸入數(shù)字装获,那么就可以修飾符的方式控制瑞信。
v-model.trim
<input type="text" v-model.trim="username"/>
// 用戶在輸入框 中字符串前后輸入空格,會被自動清理
v-model.lazy
<input type="text" v-model.lazy="username"/>
// 默認情況下穴豫,輸入框的內(nèi)容變化會實時同步到變量中凡简,但有時候,我們只需要在輸入框失去焦點的時候精肃,才去監(jiān)聽內(nèi)容秤涩。

5)、條件渲染指令

v-if

如果條件是true 司抱,就加載元素筐眷,否則就不會解析加載元素

v-show

如果條件是true, 瀏覽器也會解析元素习柠,但是會把元素隱藏

6)匀谣、列表渲染指令

v-for
基礎(chǔ)使用照棋,在想要循環(huán)生成的元素標簽上加上 v-for 指令即可

list:[
        {id:1,name :'張三'},
        {id:2,name :'李四'},
        {id:3,name :'王五'},
    ]
...
<li v-for="item in list">
    {{item.name}}
 </li>
// 添加一個列表索引 , 用到了索引 index 武翎, 就要添加一個:key 屬性綁定烈炭,并綁定索引 , 且:key 的值只能是 數(shù)字或者字符串后频,且值不能重復(fù)
<li v-for="(item,idx) in list" :title="'id_'+item.name + '_' +idx"  :key="idx">
    {{item.name}}
</li>

key的注意事項

key的值只能是字符串或數(shù)字類型
key的值必須具有唯一性
建議把屬性的id屬性的值 作為key的值
建議使用v-for指令時梳庆,一定要指定key的值
使用index的值當作key的值 沒有任何意義

2、過濾器

需要注意的點

過濾器在Vue3.x中已經(jīng)被作廢卑惜,
過濾器只用于 插值表達式和 v-bind 屬性綁定指令 中
過濾器 由管道符 進行調(diào)用
過濾器函數(shù)必須有返回值膏执,最后顯示的是過濾器函數(shù)的返回值
在過濾器的第一個形參就能拿到 實際參數(shù)
過濾器函數(shù),必須聲明在 filters 屬性中(與data露久、methods 同級)

三更米、偵聽器

偵聽變量變化

1、 函數(shù)格式的偵聽器

<div id="app">
  <input type="text" v-model="username">
</div>
const vm = new Vue({
    el: '#app',
    data: {
        username: '張三',
    },
    // 所有的偵聽器 毫痕, 都要定義在watch 屬性節(jié)點下面
    watch :{
        // 本質(zhì)上是一個函數(shù)征峦, 要偵聽哪個變量,就用這個變量作為方法的名稱
        username(newVal , oldVal){
            console.log("=============newVal  ---oldVal", newVal, oldVal)
        }
    }
})
缺點:

1消请、進入頁面不會自動觸發(fā)偵聽器
2栏笆、如果偵聽的是一個對象 ,如果對象中的屬性發(fā)生了變化臊泰,不會觸發(fā)偵聽器

2蛉加、屬性格式偵聽器

<div id="app">
  <input type="text" v-model="info.username">
</div>
const vm = new Vue({
    el: '#app',
    data: {
        info:{
            username: '張三',
        }
    },
    // 所有的偵聽器 , 都要定義在watch 屬性節(jié)點下面
    watch :{
        username:{
            // 里面的方法名稱必須是 handler 缸逃, 否則報錯
            handler(newVal , oldVal){
                console.log("=====newVal  ---oldVal", newVal, oldVal)
            },
            //  immediate 默認值是false 针饥, 作用是:控制偵聽器是否立即執(zhí)行
            immediate : true   ,
            // deep 默認值是 false , 開啟深度偵聽 , 只要對象中的任何屬性發(fā)生變化需频,就會觸發(fā)
            deep:true
        }

        // 偵聽對象中的某個屬性丁眼,需要用單引號括起來,這樣只會偵聽指定的屬性
        'info.username':{
            handler(newVal , oldVal){
                console.log("==========newVal , oldVal" , newVal , oldVal)
            },
        }
    }
})

好處:

1昭殉、可以通過immediate 控制苞七,是否立即偵聽
2、可以通過deep 控制饲化,是否要深度偵聽
3莽鸭、可以偵聽對象中的某個具體屬性的變化

三、計算屬性

通過一些列運算后吃靠, 得到一個屬性值硫眨,這個計算得到的屬性值, 可以在模板結(jié)構(gòu)或methods 方法中使用

const vm = new Vue({
    el: '#app',
    data: {
        r: 0,
        g: 0,
        b: 0,
    },
    // 所有的計算屬性都要放在 computed 節(jié)點中
    computed: {
        // 計算屬性要寫成函數(shù)的形式
        rgb() {
            return `rgb(${this.r},${this.g},${this.b})`
        }
    }
})
// 通過打印vm 對象, 可以發(fā)現(xiàn)vm多了一個 rgb 的屬性
console.log("=====", vm)

計算屬性 與 偵聽器的區(qū)別

1礁阁、computed 是同步的巧号, watch 可以實現(xiàn)異步
2、computed 必須有返回值姥闭, watch 里面的函數(shù)可以不寫返回值
3丹鸿、同時偵聽多個屬性變量時,盡量用計算屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棚品,一起剝皮案震驚了整個濱河市靠欢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铜跑,老刑警劉巖门怪,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锅纺,居然都是意外死亡掷空,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門囤锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坦弟,“玉大人,你說我怎么就攤上這事官地∧鸢” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵驱入,是天一觀的道長拧粪。 經(jīng)常有香客問我,道長沧侥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任魄鸦,我火速辦了婚禮宴杀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拾因。我一直安慰自己旺罢,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布绢记。 她就那樣靜靜地躺著扁达,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蠢熄。 梳的紋絲不亂的頭發(fā)上跪解,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音签孔,去河邊找鬼叉讥。 笑死窘行,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的图仓。 我是一名探鬼主播罐盔,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼救崔!你這毒婦竟也來了惶看?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤六孵,失蹤者是張志新(化名)和其女友劉穎纬黎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狸臣,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡莹桅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烛亦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诈泼。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖煤禽,靈堂內(nèi)的尸體忽然破棺而出铐达,到底是詐尸還是另有隱情,我是刑警寧澤檬果,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布瓮孙,位于F島的核電站,受9級特大地震影響选脊,放射性物質(zhì)發(fā)生泄漏杭抠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一恳啥、第九天 我趴在偏房一處隱蔽的房頂上張望偏灿。 院中可真熱鬧,春花似錦钝的、人聲如沸翁垂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至困食,卻和暖如春碗脊,著一層夾襖步出監(jiān)牢的瞬間啼肩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疟游,地道東北人呼畸。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像颁虐,于是被迫代替她去往敵國和親蛮原。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容