vue學習第二天

CSS與style的綁定

css的綁定:

<div class="static"
     v-bind:class="{ active: isActive, 'text-danger': hasError }">
</div>
或:
<div v-bind:class="[{ active: isActive }, 'text-danger']"></div>
data: {
  isActive: true,
  hasError: false
}
////////第一種  渲染結果爲: <div class="static active"></div>(active,'text-danger'爲CSS類名)
<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'
    }
  }
}
/////第三種  用計算屬性的值綁定

內聯樣式的綁定:

////同上面一樣有對象寫法
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
  activeColor: 'red',
  fontSize: 30  //這裏沒單引號
}
或更簡潔的:
<div v-bind:style="styleObject"></div>
data: {
  styleObject: {
    color: 'red',
    fontSize: '13px'  //這裏有單引號
  }
}
也可以將值與計算屬性(computed)綁定
/////也可以與數組綁定  方法也css一樣

(樣式)屬性名有瀏覽器兼容問題時  vue會自動偵測並添加前綴

屬性值有兼容問題時 :

<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
這樣 vue只會返回瀏覽器能識別的最後一個值

最後提醒:重複使用的樣式可以將其自定義爲組件,提高代碼整潔度

條件渲染

//使用
<h1 v-if="ok">Yes</h1>
<h1 v-else>No</h1>
//與組件結合
<template v-if="Math.random() > 0.5">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>
//v-else 元素必須緊跟在帶 v-if 或者 v-else-if 的元素的後面,否則它將不會被識別。

//細節
<template v-if="isNameLogin">
  <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>
//key的作用:在這個模板中vue的優化機制會識別到條件中 lable與input是可重用的,不加key導致切換 
//isNameLogin值時 lable,input不會從新渲染(看效果來決定是否添加)
//是否顯示元素也可以用v-show指令 v-show指令只是改變元素的display樣式(所以v-show不能用於自定義模板上) 渲染是肯定要做的 看效果選擇v-if 與 v-show

列表渲染

<ul id="example-2">
  <li v-for="(item, index) in items"> 
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>
var example2 = new Vue({
  el: '#example-2',
  data: {
    parentMessage: 'Parent',
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})
//其中index是可選參數'(item, index) in items'中'in'可改爲'of'
迭代對象:
<div v-for="(value, key, index) in object">
  {{ index }}. {{ key }}: {{ value }}
</div>
new Vue({
  el: '#v-for-object',
  data: {
    object: {
      firstName: 'John',
      lastName: 'Doe',
      age: 30
    }
  }
})
//其中一個第二個參數爲key 第三個爲index都是可選參數

    items也可以爲整數或計算屬性

vue重新渲染數組的優化機制是:直接利用已有的相同元素進行修改樣式(少的再補,多的就刪)  當數組數據項位置改變時就可能不適用這種方式 這時我們給每個數據項添加"id_diy" 再

<div v-for="item in items" :key="item.id">
  <!-- 內容 -->
</div>

這樣Vue就會根據id_diy來跟蹤數組渲染出來的Dom節點

數組跟新檢測問題

vue會觀察數組的push(),pop(),shift(),unshift(),splice(),sort(),reverse()方法 並更新視圖

而有些方法如filter(),concat(),和slice()這些方法不會改變原數組 只是返回一個新數組 從而導致視圖不更新,可以將返回值賦給原數組,從而更新視圖

注意,由於javascript的限制,Vue 不能檢測以下變動的數組:

  1. 當你利用索引直接設置一個項時,例如:vm.items[indexOfItem] = newValue
  2. 當你修改數組的長度時,例如:vm.items.length = newLength
<!-- 實現值的修改 -->
// Vue.set,vue.$set也一樣
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice 
vm.items.splice(indexOfItem, 1, newValue) 

<!-- 直接縮短數組 -->
vm.items.splice(newLength)

對象更新檢測問題

同樣由於javascript的限制,Vue 不能檢測對象屬性的添加或刪除

可以用Vue.set(object, key, value)

當你需要用Object.assign() 或_.extend()添加多個新屬性時 可以調用這些方法再將返回值賦給原對象

事件處理

vue提供了事件修飾來設置事件的行爲,按鍵修飾來確定按鍵的狀態(按下,鬆開)與各個按鍵(<input @keyup.alt.67="clear">:alt+c鬆開狀態)

表單輸入綁定

用v-model指令把輸入與屬性綁定起來 輸入可以爲radio,checkbox,text,select  當這些值改變綁定的屬性的值也會改變,v-model還可以加'.lazy'(change改變屬性值而不是input),'.number','trim'修飾符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章