VUE復(fù)習(xí)筆記2(介紹)

什么是vuejs

Vue 是一套用于構(gòu)建用戶界面的漸進(jìn)式框架舀患。與其它大型框架不同的是朱灿,Vue 被設(shè)計(jì)為可以自底向上逐層應(yīng)用。Vue 的核心庫只關(guān)注視圖層,不僅易于上手董济,還便于與第三方庫或既有項(xiàng)目整合。另一方面要门,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫結(jié)合使用時虏肾,Vue 也完全能夠?yàn)閺?fù)雜的單頁應(yīng)用提供驅(qū)動。

如果你已經(jīng)是有經(jīng)驗(yàn)的前端開發(fā)者欢搜,想知道 Vue 與其它庫/框架有哪些區(qū)別封豪,請查看對比其它框架

起步

嘗試 Vue.js 最簡單的方法是使用 JSFiddle 上的 Hello World 例子炒瘟。你可以在瀏覽器新標(biāo)簽頁中打開它吹埠,跟著例子學(xué)習(xí)一些基礎(chǔ)用法〈埃或者你也可以創(chuàng)建一個 .html 文件缘琅,然后通過如下方式引入 Vue:

<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<!-- 生產(chǎn)環(huán)境版本廓推,優(yōu)化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

聲明式渲染

vuejs的核心是使用簡潔的模板語法聲明式的將數(shù)據(jù)渲染進(jìn)dom中刷袍。

<div id="app">
  {{ message }}
</div>

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

{{message}}渲染得到結(jié)果 hello vue
我們可以通過 app.message讀取message的值
也可以通過 app.message='hello world'修改他的值

除了以上的文本插值方式,我們還可以綁定元素的特性樊展。

<div id="app-2">
  <span v-bind:title="message">
    鼠標(biāo)懸停幾秒鐘查看此處動態(tài)綁定的提示信息呻纹!
  </span>
</div>

var app2 = new Vue({
  el: '#app-2',
  data: {
    message: '頁面加載于 ' + new Date().toLocaleString()
  }
})

以上代碼在app2中的span中堆生,綁定了 title 功能,鼠標(biāo)上移雷酪,顯示相關(guān)信息淑仆。

這里我們遇到了一點(diǎn)新東西。你看到的 v-bind: 特性被稱為指令哥力。指令都是帶有 v- 前綴的糯景,來表示這是 vue提供的特性。簡寫為 : ,他會在渲染 dom 的時候應(yīng)用特殊的響應(yīng)式行為省骂。
例如:

v-bind:title="鼠標(biāo)懸停顯示"  //常規(guī)
:title="鼠標(biāo)懸停顯示"  //簡寫

條件與循環(huán)

條件:v-if

vue中控制一個元素的顯示和隱藏也非常簡單蟀淮。

<div id="app-3">
  <p v-if="seen">現(xiàn)在你看到我了</p>
</div>

var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

在 v-if 中綁定了一個 seen 的值,當(dāng)seen===true钞澳,就顯示節(jié)點(diǎn)怠惶,false則隱藏。
這個例子展示我們不僅可以渲染數(shù)據(jù)到dom上轧粟,還可以操作他的結(jié)構(gòu)策治。
如果 js中設(shè)置 app3.seen=false,節(jié)點(diǎn)就會 被去掉。
通常 v-if 都會被用在 tab 切換上面兰吟。

循環(huán):v-for

v-for 指令可以綁定數(shù)組的數(shù)據(jù)來渲染一個項(xiàng)目列表:

<div id="app-4">
  <ol>
    <li v-for="(todo,index) in todos" :key="idx">
      {{ todo.text }}
    </li>
  </ol>
</div>

var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: '學(xué)習(xí) JavaScript' },
      { text: '學(xué)習(xí) Vue' },
      { text: '整個牛項(xiàng)目' }
    ]
  }
})

其中 v-for屬性中的 todo 代表 todos 這個數(shù)組中的每一個項(xiàng)通惫,即 {text:"學(xué)習(xí)javascript"}等這三個的循環(huán)。
如果需要在列表中新增一個text和內(nèi)容混蔼,如下:app4.todos.push({ text: '新項(xiàng)目' })
使用數(shù)組的js操作刪增即可履腋。

注意:一般使用 v-for 的同時,都需要添加 key屬性惭嚣,否則會出現(xiàn)警告遵湖,key如果在數(shù)組中沒有id,可以使用index

處理用戶輸入

當(dāng)用戶與應(yīng)用交互的時候晚吞,使用 v-on:事件可以添加一個事件監(jiān)聽器延旧,簡寫為@事件
例如:

v-on:click="handleclick()"  //常規(guī)
@click="handleclick()"  //簡寫
<div id="app-5">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">逆轉(zhuǎn)消息</button>
</div>

var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

這里是在 button 點(diǎn)擊的時候 執(zhí)行 reserseMessage方法。
方法則寫在槽地,vue中的methods中迁沫。

reserseMessage方法中我們更新了引用,但是沒有操作dom捌蚊,因?yàn)樗械膁om都會由 vue 自動來處理集畅。

Vue還提供了 v-model 指令,可以輕松的實(shí)現(xiàn)表單和應(yīng)用的雙向綁定逢勾。

<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>

var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})

當(dāng)我們在 input 中輸入刪除的時候牡整, p標(biāo)簽中的 message也會實(shí)時的輸入和刪除。

組件化的應(yīng)用和構(gòu)建

組件系統(tǒng)是 Vue 的另一個重要概念溺拱,因?yàn)樗且环N抽象逃贝,允許我們使用小型谣辞、獨(dú)立和通常可復(fù)用的組件構(gòu)建大型應(yīng)用

在 Vue 里沐扳,一個組件本質(zhì)上是一個擁有預(yù)定義選項(xiàng)的一個 Vue 實(shí)例泥从。

// 定義名為 todo-item 的新組件
Vue.component('todo-item', {
  template: '<li>這是個待辦項(xiàng)</li>'
})
現(xiàn)在你可以用它構(gòu)建另一個組件模板:

<ol>
  <!-- 創(chuàng)建一個 todo-item 組件的實(shí)例 -->
  <todo-item></todo-item>
</ol>

自定義組件都是在vue中的 components中描述的,一般如下
①在新建的vue文件中寫一個組件
②在需要組件的頁面中引入該組件沪摄,import ...
③在components中注冊自定義組件使用躯嫉。這里的components中是使用了es6的語法。

components:{
  vueCropper:vueCropper  //屬性為自定義的組件名字杨拐,值是import引用組件的變量祈餐。
//組件的使用:<vueCropper></vueCropper>
}

components:{
  yes:vueCropper  
  //如果這樣寫,那么組件使用的時候就是 <yes></yes>
}

但是一般都是選擇 es6的簡寫方式哄陶,等同于 案例1


image.png

如果我們在一個div中引入 2個 <todo-item></todo-item>,那他就會渲染2次相同的文本內(nèi)容帆阳,這并不是我們想要的,因?yàn)槌36际窍嗤哪K里面內(nèi)容是不同的屋吨。

<ol>
  <todo-item></todo-item>
  <todo-item></todo-item>
</ol>

解決方法蜒谤,我們可以在組件中,接收一個 props

父組件//
<template>
  <tips :msg="tipsmsg" ></tips>
  <tips :msg="tipsmsg2" ></tips>
</template>

<script>
    import tips from '../components/tips/tips';
    export default{
        data(){
              return{
                    tipsmsg:' '
              }
        },
        components:{
            tips
        }
  }
</script>


子組件//
<template>
    <div :class="['tips',{'tipsoff':tipsoff}]">
        <p class="p1">{{msg}}</p>
    </div>
</template>

<script>
    export default{
        props:['msg','msgshow'],
        data(){
            return{
                tipsoff:true
            }
        },
        created(){
            setTimeout(()=> {
                this.tipsoff=false
            }, 3000);
        }
    }
</script>

①首先父組件中引用<tips :msg="tipsmsg" ></tips>,
綁定屬性msg至扰,然后tipsmsg是需要傳給msg的內(nèi)容鳍徽,在data中定義,可以后續(xù)修改敢课。
②子組件中定義props:['msg']阶祭,接收msg,這時候拿到的msg是父組件中的msg傳過來的值翎猛,也就是把tipsmsg賦給了msg再傳給子組件胖翰,這樣 子組件就能獲取父組件的內(nèi)容或者狀態(tài)了接剩。
③如下子組件中包含的{{msg}}就是props中獲取的msg

    <div :class="['tips',{'tipsoff':tipsoff}]">
        <p class="p1">{{msg}}</p>
    </div>

④當(dāng)父組件傳不同的值時切厘,相應(yīng)的子組件也會顯示不同的內(nèi)容。

<template>
  <tips :msg="tipsmsg" ></tips>
  <tips :msg="tipsmsg2" ></tips>
</template>

⑤同樣的懊缺,我們獲取到了父組件的msg疫稿,也能通過msg的不同,來改變子組件的狀態(tài)鹃两。

這只是組件的vue內(nèi)容的一小部分遗座。
其余部分請見后面的筆記。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俊扳,一起剝皮案震驚了整個濱河市途蒋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馋记,老刑警劉巖号坡,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懊烤,死亡現(xiàn)場離奇詭異,居然都是意外死亡宽堆,警方通過查閱死者的電腦和手機(jī)腌紧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畜隶,“玉大人壁肋,你說我怎么就攤上這事∽崖” “怎么了浸遗?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長箱亿。 經(jīng)常有香客問我乙帮,道長,這世上最難降的妖魔是什么极景? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任察净,我火速辦了婚禮,結(jié)果婚禮上盼樟,老公的妹妹穿的比我還像新娘氢卡。我一直安慰自己,他們只是感情好晨缴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布译秦。 她就那樣靜靜地躺著,像睡著了一般击碗。 火紅的嫁衣襯著肌膚如雪筑悴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天稍途,我揣著相機(jī)與錄音阁吝,去河邊找鬼。 笑死械拍,一個胖子當(dāng)著我的面吹牛突勇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坷虑,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼甲馋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迄损?” 一聲冷哼從身側(cè)響起定躏,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后痊远,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绑谣,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年拗引,在試婚紗的時候發(fā)現(xiàn)自己被綠了借宵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡矾削,死狀恐怖壤玫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哼凯,我是刑警寧澤欲间,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站断部,受9級特大地震影響猎贴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蝴光,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一她渴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔑祟,春花似錦趁耗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至径簿,卻和暖如春罢屈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背篇亭。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工缠捌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暗赶。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓鄙币,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蹂随。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

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

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容因惭,還有我對于 Vue 1.0 印象不深的內(nèi)容岳锁。關(guān)于...
    云之外閱讀 5,046評論 0 29
  • Vue 實(shí)例 屬性和方法 每個 Vue 實(shí)例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,204評論 0 6
  • 組件(Component)是Vue.js最核心的功能,也是整個架構(gòu)設(shè)計(jì)最精彩的地方蹦魔,當(dāng)然也是最難掌握的激率。...
    六個周閱讀 5,587評論 0 32
  • 喜歡你春風(fēng)輕柔的呼吸 喜歡你夜空深藏的眼睛 喜歡你風(fēng)鈴搖曳的聲音 我喜歡你的一切 很深切
    何處會有撐傘人閱讀 223評論 0 2
  • 你喜歡一個人獨(dú)處咳燕, 她喜歡一群人喧囂。 你喜歡含蓄表達(dá)乒躺, 她喜歡一吐為快招盲。 你喜歡歇息, 她喜歡運(yùn)動嘉冒。 然后曹货, 她...
    小劇在成長閱讀 141評論 3 11