[vue] - Vue.js教程-基礎(chǔ)

之前做過項目,一直沒有總結(jié)過胚股,現(xiàn)在重新看文檔加深一遍~~

一较店、介紹

1士八、聲明與渲染

<div id="app">
  {{ message }}
</div>
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

2、指令

  • v-if
    true是加載梁呈,false則不加載
  • v-for
  • v-on
    v-on:click @click
  • v-model 雙向數(shù)據(jù)綁定

3婚度、vue組件

一個組件實質(zhì)上也是一個vue實例
props: ['todo']

<div id="app-7">
  <ol>
    //使用 v-bind 指令將 todo 傳到每一個重復的組件中
    <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
  </ol>
</div>
--
Vue.component('todo-item', {
  //將數(shù)據(jù)從父作用域傳到子組件,模板可渲染動態(tài)數(shù)據(jù)
  props: ['todo'],
  template: '<li>This is a todo</li>'
})
var app7 = new Vue({
  el: '#app-7',
  data: {
    groceryList: [
      { text: 'Vegetables' },
      { text: 'Cheese' },
      { text: 'Whatever else humans are supposed to eat' }
    ]
  }
})

二、Vue實例

1、構(gòu)造函數(shù)創(chuàng)建實例

var vm = new Vue({})

2蝗茁、屬性醋虏,方法

data:{} 屬性
method:{}定義方法

3、實例生命周期

  • 數(shù)據(jù)檢測哮翘,編譯模板颈嚼,掛載實例到DOM,數(shù)據(jù)變化時更新DOM
  • 生命周期鉤子
    created 在實例被創(chuàng)建之后被調(diào)用
    mounted
    updated
    destroyed 銷毀實例時調(diào)用
  • Vue.js沒有構(gòu)造器的概念
    4饭寺、生命周期圖示
Paste_Image.png

三阻课、模板語法

1、插值

1)艰匙、文本

{{}} 插值
v-once 一次性插值

<span v-once>This will never change: {{ msg }}</span>
  • 雙大括號會將數(shù)據(jù)解釋為純文本限煞,而非 HTML
2)、純html

v-html 可以輸出真正的 HTML
<div v-html="rawHtml"></div>
:動態(tài)渲染的html容易導致XSS攻擊员凝,絕不要對用戶提供的內(nèi)容插值

3)署驻、屬性

{{}}不能在html屬性中使用,得用v-bind
<div v-bind:id="dynamicId"></div>

<button v-bind:disabled="true">Button</button>
4)健霹、使用javascript表達式
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id"></div>

:表達式中可以訪問Math旺上、Date這樣的全局變量,但不能訪問用戶自定義變量

2糖埋、指令

1)抚官、參數(shù)

指令可以接受參數(shù)
<a v-bind:href="url"></a>

2)、修飾符

. 用于指出一個指定應(yīng)該以特殊方式綁定
<form v-on:submit.prevent="onSubmit"></form>

3阶捆、Filters 過濾器

由管道符 | 表示凌节,添加在{{}}尾部
{{ message | capitalize }}
: Vue 2.x 中,過濾器只能在 mustache 綁定和 v-bind表達式(從 2.1.0 開始支持)中使用洒试,因為過濾器設(shè)計目的就是用于文本轉(zhuǎn)換倍奢。

過濾器函數(shù)總接受表達式的值作為第一個參數(shù)。
new Vue({
  filters: {
    capitalize: function (value) {
      if (!value) return ''
      value = value.toString()
      return value.charAt(0).toUpperCase() + value.slice(1)
    }
  }
})
過濾器可以串聯(lián):
{{ message | filterA | filterB }}
過濾器是 JavaScript 函數(shù)垒棋,因此可接受參數(shù):
{{ message | filterA('arg1', arg2) }}
這里卒煞,字符串 'arg1' 將傳給過濾器作為第二個參數(shù), 
arg2 表達式的值將被求值然后傳給過濾器作為第三個參數(shù)叼架。

4畔裕、縮寫

v-on:click @click

四、計算屬性

<div id="example">
  <p>初始值: "{{ message }}"</p>
  <p>計算之后的值: "{{ reversedMessage }}"</p>
</div>

var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    //聲明計算屬性
    reversedMessage: function () {
      return this.message.split('').reverse().join('')
    }
  }
})

vm.reversedMessage 的值始終取決于 vm.message 的值

  • 計算屬性 和 Methods 比較
    計算屬性是基于它的依賴緩存乖订,只要message不發(fā)生改變扮饶,那計算屬性必然也不會改變,計算屬性不會總執(zhí)行乍构。
    相比而言甜无,每當重新渲染的時候,method 調(diào)用總會執(zhí)行函數(shù)
  • 計算屬性 和 Watched Property 比較
    $watch: 用于監(jiān)聽vue實例的數(shù)據(jù)變動
    <div id="demo">{{ fullName }}</div>
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})

上面代碼是命令式的和重復的。

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})
  • 計算setter
    計算屬性默認只有g(shù)etter岂丘,可以自己定義setter
computed: {
  fullName: {
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    set: function (newValue) {  // setter
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}
  • 觀察watchers
    用途:在數(shù)據(jù)變化響應(yīng)時陵究,執(zhí)行異步操作或開銷較大的操作時
    watch示例
    使用 watch 選項允許我們執(zhí)行異步操作(訪問一個 API),限制我們執(zhí)行該操作的頻率奥帘,并在我們得到最終結(jié)果前铜邮,設(shè)置中間狀態(tài)。

五寨蹋、具體指令詳解

1松蒜、class

1)、對象語法
  • 對象钥庇,可以多個屬性
<div class="static"
     v-bind:class="{ active: isActive, 'text-danger': hasError }">
</div>
  • 直接綁定data中的一個對象
<div v-bind:class="classObject"></div>
data: {
  classObject: {
    active: true,
    'text-danger': false
  }
}
  • 常用且強大的模式如下
    綁定返回對象的[計算屬性]
<div v-bind:class="classObject"></div>
data: {
  isActive: true,
  error: null
},
computed: {
  classObject: function () {
    return {
      active: this.isActive && !this.error,
      'text-danger': this.error && this.error.type === 'fatal',
    }
  }
}
2)牍鞠、數(shù)組語法

v-bind:class="[activeClass, errorClass]"
v-bind:class="[isAc ? acClass : '', eClass]"

當有多個條件 class 時可以在數(shù)組語法中使用對象語法
 v-bind:class="[{ active: isActive }, errorClass]"
3)咖摹、用在組件上
Vue.component('my-co', {
  template: '<p class="foo bar">Hi</p>'
})
//這些類將被添加到根元素上面 
<my-co v-bind:class="{ active: isActive }"></my-co>
Paste_Image.png

2评姨、style

1)、對象語法,數(shù)組語法
//綁定到一個樣式對象通常更好
<div v-bind:style="styleObject"></div>
data: {
  styleObject: {
    color: 'red',
    fontSize: '13px'
  }
}
<div v-bind:style="[baseStyles, overridingStyles]">

3萤晴、條件渲染(v-if /v-show)

  • <template> 元素當做包裝元素吐句,最終的渲染結(jié)果不會包含它


    Paste_Image.png
  • v-if
  • v-else
  • v-else-if (2.1.0 新增)
  • 使用key控制元素的可重用
    為高效的渲染元素,vue通常會復用已有的元素而不是從頭渲染

key必須是唯一值

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address" key="email-input">
</template>

<label>元素會被復用店读,input不會被復用(有key屬性)

  • v-show
    v-show 的元素會始終渲染并保持在 DOM 中嗦枢。(切換元素的 display)
    v-show 不支持 <template> 語法
  • v-if 有更高的切換消耗而 v-show 有更高的初始渲染消耗。
    因此屯断,如果需要頻繁切換使用 v-show 較好文虏,如果在運行時條件不大可能改變則使用 v-if 較好。

4殖演、列表渲染(v-for)

v-for="(item, index) in items"
v-for="item of items"
  • Template v-for
<ul>
  <template v-for="item in items">
    <li>{{ item.msg }}</li>
    <li class="divider"></li>
  </template>
</ul>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氧秘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子趴久,更是在濱河造成了極大的恐慌丸相,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彼棍,死亡現(xiàn)場離奇詭異灭忠,居然都是意外死亡,警方通過查閱死者的電腦和手機座硕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門弛作,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人华匾,你說我怎么就攤上這事缆蝉。” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵刊头,是天一觀的道長黍瞧。 經(jīng)常有香客問我,道長原杂,這世上最難降的妖魔是什么印颤? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮穿肄,結(jié)果婚禮上年局,老公的妹妹穿的比我還像新娘。我一直安慰自己咸产,他們只是感情好矢否,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脑溢,像睡著了一般僵朗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屑彻,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天验庙,我揣著相機與錄音,去河邊找鬼社牲。 笑死粪薛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的搏恤。 我是一名探鬼主播违寿,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼熟空!你這毒婦竟也來了藤巢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤痛阻,失蹤者是張志新(化名)和其女友劉穎菌瘪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阱当,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡俏扩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弊添。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片录淡。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖油坝,靈堂內(nèi)的尸體忽然破棺而出嫉戚,到底是詐尸還是另有隱情刨裆,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布彬檀,位于F島的核電站帆啃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窍帝。R本人自食惡果不足惜努潘,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坤学。 院中可真熱鬧疯坤,春花似錦、人聲如沸深浮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飞苇。三九已至菌瘫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玄柠,已是汗流浹背突梦。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工诫舅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羽利,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓刊懈,卻偏偏與公主長得像这弧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虚汛,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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