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'修饰符

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