Vue基础

2017-07-16  本文已影响0人  Miss_麦兜

Vue实例

var data = { a: 1 }
var vm = new Vue({
  data: data
})
vm.a === data.a // -> true

模板语法

Vue.js 使用了基于 HTML 的模板语法。在底层的实现上, Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。

插值

使用 “Mustache” 语法(双大括号)进行文本插值:

<span>Message: {{ msg }}</span>

双大括号会将数据解释为纯文本,使用 v-html 指令插入HTML(数据绑定会被忽略):

<div v-html="rawHtml"></div>

Mustache 不能在 HTML 属性中使用,应使用 [v-bind 指令],使用了v-bind 指令后,引号里面就是一个js表达式,而不是字符串:

<!-- 完整语法 -->
<a v-bind:href="url"></a>
<!-- 缩写 -->
<a :href="url"></a>

如果条件被求值为 false 的话该属性会被移除:

<button v-bind:disabled="isButtonDisabled">Button</button>

Vue.js 的数据绑定支持 JavaScript 表达式,但是每个绑定都只能包含单个表达式。

指令

<form v-on:submit.prevent="onSubmit"></form>

过滤器

Vue.js 允许自定义过滤器,用作一些常见的文本格式化,用在两个地方:mustache 插值和 v-bind 表达式。添加在 JavaScript 表达式的尾部,由“管道”符指示:

<!-- in mustaches -->
{{ message | capitalize }}
<!-- in v-bind -->
<div v-bind:id="rawId | formatId"></div>

过滤器设计目的就是用于文本转换。在指令中实现更复杂的数据变换,应该使用计算属性。

计算属性

当需要对模板中的数据进行复杂的处理时,使用computed属性。计算属性 reversedMessage 函数将用作属性 vm.reversedMessage 的 getter 。

<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // a computed getter
    reversedMessage: function () {
      // `this` points to the vm instance
      return this.message.split('').reverse().join('')
    }
  }
})

computed vs methods

计算属性setter

计算属性默认只有 getter ,在需要时也可以自定义一个 setter 。

computed: {
  fullName: {
    // getter
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

观察watch

当需要在数据变化响应,执行异步操作或开销较大的操作时,使用watch 。

Class 绑定

在 v-bind 用于 class 和 style 时,表达式的结果类型除了字符串之外,还可以是对象或数组。

对象语法

v-bind:class 指令可以与普通的 class 属性共存。动态地切换 class:

<div class="static"
     v-bind:class="{ active: isActive, 'text-danger': hasError }">
</div>

也可以绑定返回对象的计算属性:

<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:class="[isActive ? activeClass : '', errorClass]">
//当有多个条件 class 时这样写有些繁琐,在数组语法中使用对象语法
<div v-bind:class="[{ active: isActive }, errorClass]">

条件渲染

v-if,v-else-if,v-else ,v-show。
Vue 提供了一种方式来声明“这两个元素是完全独立的——不要复用它们”。只需添加一个具有唯一值的 key 属性即可。

v-if vs v-show

列表渲染

用 v-for 根据一组数组进行渲染.

组件和v-for

组件有自己独立的作用域,为了传递迭代数据到组件里,要用 props:

<my-component
  v-for="(item, index) in items"
  v-bind:item="item"
  v-bind:index="index"
  v-bind:key="item.id">
</my-component>

事件处理器

为什么在HTML中监听事件?

Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上,它不会导致任何维护上的困难。它有如下优点:

  1. 根据HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。
  2. 无须在 JavaScript 里手动绑定事件, ViewModel 代码是纯粹的逻辑,和 DOM 完全解耦,更易于测试。
  3. 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除,无须手动清理它们。
上一篇下一篇

猜你喜欢

热点阅读