2018.9.6 關於對前端框架Vue.js的理解
晚上19.35又是一個安靜的夜晚,趁著安靜,趕緊過來csdn總結一下今天學到vue的知識。
首先了解一個新的東西,必須瞭解它是什麼,能幹什麼。這是我比較深刻的體會。
什麼是Vue.js:
*** vue.js:是目前最火的框架(關注的人是最多的),而react是目前最流行的框架(使用的人數是最多的),React除了可以開發網站,還可以開發手機APP,Vue也是可以開發手機APP 的,但是需要藉助Weex。
***Vue.js 是前端的**主流框架之一**,和Angular.js、React.js 一起,併成為前端三大主流框架!
***Vue.js 是一套構建使用者介面的框架,**只關注檢視層**,它不僅易於上手,還便於與第三方庫或既有專案整合。(Vue有配套的第三方類庫,可以整合起來做大型專案的開發。
***前端的主要工作?主要負責MVC中的V這一層;主要工作就是和介面打交道,來製作前端頁面效果;
為什麼要學習前端框架Vue.js:
***在企業中為了提高開發效率,從而來使用框架進行提神開發的效率。
***能夠幫助我們減少不必要的DOM操作;提高渲染效率;雙向資料繫結的概念通過框架提供的指令,我們前端程式設計師只需要關心資料的業務邏輯,不再關心DOM是如何渲染的了。
***在Vue中,一個核心的概念,就是讓使用者不再操作DOM元素,解放了使用者的雙手,讓程式設計師可以更多的時間去關注業務邏輯;
框架和庫的區別
***框架:是一套完整的解決方案;對專案的入侵較大,專案如果需要更換框架,則需要重新架構整個專案。
***庫:其實就是外掛,提供一些小的功能,對專案入侵比較小,如果有的庫完成不了某些需求,可以很容易的切換到其他的實現需求。
Node(後端)中的MVC與前端中MVVM之間有什麼區別:
***MVC 是後端的分層開發概念。
***MVVM是前端檢視層的概念,主要關注在於檢視層進行分離,也就是說:MVVM把前端的檢視層分為了三部分 Model,View, ViewModel.
如何使用Vue.js呢:如下
關於標籤 v-cloak還有v-text理解:
v-cloak:能夠解決所有差值表示式因為網速慢導致表示式閃爍的問題,也可以在msg的前後新增任何的資料,不會進行覆蓋。
v-text:本身就預設沒有閃爍問題的,但是因為v-text在標籤裡面,當解析到這裡的時候,會先執行標籤裡的內容,導致123倍覆蓋
v-html:能夠把轉義的標籤(就是字串)變成html的標籤
舉個小栗子:
var vm=new Vue({
el:'#app',
data:{
msg:'<h1>哈哈哈,記得每天保持好心情哦!</h1>'
}
})
//接下來使用v-html來進行得到h1標籤,而不是字串:
<div id="app">
<div v-html="msg"></div>
</div>
這樣就會在客戶端顯示出h1標題的打字了
要是沒有使用v-html的話輸出是這樣子的:<h1>哈哈哈,記得每天保持好心情哦!</h1> 的字串
v-bind:可以用來繫結屬性指令的變數;
舉個小栗子:
var vm=new Vue({
el:'#app',
data:{
mytitle:'這是我自定義的標籤’
}
})
<div id="#app">
<input type="button" value="按鈕" v-bind:title="mytitle+'強哥'/>
</div>
結果在在頁面上有一個按鈕,滑鼠放上去會顯示一句話:這是我自定義標籤強哥。
此外v-bind還可以進行簡寫:<input type="button" value="按鈕" :title="mytitle+'強哥'/>
<!--v-bind:指令可以被簡寫為 :要繫結的屬性-->
<!--v-bind 中可以寫合法的js表示式-->
先小小的總結一下:
***1.如何定義一個基本的Vue程式碼結構
***首先先匯入架包<script src="./vue-2.4.0.js"></script>
***然後在建立Vue 的最基本的結構:
***var vm=new Vue({
el:'#app' , //表示要控制的區域
data:{ //data存放的是我們el中要使用的資料
msg:'welcome'
},
methods:{ //它用來定義Vue屬性可用的方法
show:function(){
alert("hello!")
}
}
})
***2.差值表示式{{}} 和v-text
***3.v-cloak
***4.v-html
***5.v-bind Vue提供事件繫結機制 縮寫是 :
***6.v-on Vue提供方法繫結機制 縮寫是 @:
2018.9.7 晚上八點整 接上
Vue的事件修飾符:
*** .stop:阻止冒泡(就是指一層一層的進行顯示)
<input type="button" value="點我" @click.stop="onclick"> //這個按鈕點選後就不會再往外執行啦 這就是阻止冒泡
*** .prevent:阻止預設事件
<a href="www.baidu.com" @click.stop="onclick">百度一下,你就知道!</a> //這個阻止預設事件就是 不會再去訪問百度
*** .capture :新增事件監聽器的時候使用事件捕獲模式
<div class="inner" @click.capture></div> //這個是新增監聽器時預設使用監聽器的捕獲模式
*** .self :只當事件在該元素(比如不是子元素)觸發時進行回撥
<div class="inner" @click.self="divHeader"></div>
*** .once:事件只觸發一次
vue的雙向繫結 v-model
***首先需要說明的是v-bind無法進行雙向的繫結,只能從M到V
***v-model:就可以實現雙向資料的繫結,但是v-model只能用於表單資料中input(radio,text,address,email......) select checkbox textarea等元素。
示例程式碼:<input type="text" v-model="msg" style="width:100%">
現在使用v-model來寫一個簡易的計算器:
***介面如圖所示(裡面有水印,不要在意那些細節)
程式碼實現:
<html>
<head>
<script src="./vue-.2.4.0.js"><scritp>
</head>
<body>
<div id="app">
<input type="text" v-model="n1">
<select v-model="opt">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" v-model="n2">
<input type="button" name="=" :click="jisuan">
<input type="text" v-model="result">
</div>
var vm=new Vue({
el:'#app',
data:{
n1:'0',
opt:'+',
n2:'0',
result:'0'
},
methods:{
jisuan(){
switch(this.opt)
case:+
this.result=parseInt(this.n1)+parseInt(this.n2)
break;
}
}
})
</body>
</html>
在vue中使用格式
### 使用class樣式
1. 陣列
<h1 :class="['red', 'thin']">這是一個邪惡的H1</h1>
2. 陣列中使用三元表示式
<h1 :class="['red', 'thin', isactive?'active':'']">這是一個邪惡的H1</h1>
3. 陣列中巢狀物件
<h1 :class="['red', 'thin', {'active': isactive}]">這是一個邪惡的H1</h1>
4. 直接使用物件
<h1 :class="{red:true, italic:true, active:true, thin:true}">這是一個邪惡的H1</h1>
### 使用內聯樣式
1. 直接在元素上通過 `:style` 的形式,書寫樣式物件
<h1 :style="{color: 'red', 'font-size': '40px'}">這是一個善良的H1</h1>
2. 將樣式物件,定義到 `data` 中,並直接引用到 `:style` 中 + 在data上定義樣式:
data: {
h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' }
}
+ 在元素中,通過屬性繫結的形式,將樣式物件應用到元素中:
<h1 :style="h1StyleObj">這是一個善良的H1</h1>
3. 在 `:style` 中通過陣列,引用多個 `data` 上的樣式物件
+ 在data上定義樣式:
data: {
h1StyleObj: { color: 'red', 'font-size': '40px', 'font-weight': '200' },
h1StyleObj2: { fontStyle: 'italic' }
}
+ 在元素中,通過屬性繫結的形式,將樣式物件應用到元素中:
<h1 :style="[h1StyleObj, h1StyleObj2]">這是一個善良的H1</h1>
## Vue指令之`v-for`和`key`屬性
***1.進行迭代物件中的屬性
***<div v-for="(value,key,i)" in userInfo>鍵是:{{key}}---值是:{{value}} ---索引下標是:{{i}} //進行遍歷物件屬性身上的屬性
***2.進行迭代陣列
***<p v-for="(item,i)in list">index:{{i}}--------value:{{item}}</p>
***3.用來迭代數字
***<p v-for="i in 10">這是第{{i}}個標籤</p>
***2.2.0+ 的版本里,**當在元件中使用** v-for 時,key 現在是必須的。通過key來唯一標識。
## Vue指令之`v-if`和`v-show`
> 一般來說,v-if 有更高的切換消耗而 v-show 有更高的初始渲染消耗。因此,如果需要頻繁切換 v-show 較好,如果在執行時條件不大可能改變 v-if 較好。