04、定义一个Vue实例的4个常用选项

创建一个Vue实例仅需4步,如下所示:


创建Vue实例.png

我们知道,定义一个Vue实例的参数有el(指定挂载的DOM元素),data(实例的数据),上一节讲过除了这两个之外,还可以定义其他参数。今天,我们就来学习在开发中,我们要怎么定义一个vue实例才能满足我们的需要?
下面,我们先用上一节的知识,先创建一个Vue实例:

<div id = "app"></div>
<script>
  let vm = new Vue({
    // 挂载元素
    el: '#app',
    // 实例vm的数据
    data: {}
  })
</script>

很简单,接下来,就用这个实例来展开讲解。
我们就具体讲一下定义一个Vue实例会用到的4个常用参数选项。

1、filters 过滤器



第一个要讲的是过滤器filters选项。为什么要有这个东西呢?举个例子,假设我们有一组数字,都是小数,如下:

let vm = new Vue({
  el: '#app',
  data: {
    num1: 33.141,
    num2: 46.212,
    num3: 78.541
  }
})

num1,num2,num3都是Vue实例vm的小数,我们把它展示在视图上:

<div id="app">
  数字1:{{ num1 }}<br>
  数字2:{{ num2 }}<br>
  数字3:{{ num3 }}
</div>

利用上节讲到的双大括号{{ }}渲染出来,很简单。如下图所示:


效果图.png

然而当需求突然改变了,我们不能把小数展示出来,需要把小数转换成整数再显示。
这个时候,我们需要把三个小数经过过滤处理后再展示,不能直接展示。这种情况就需要用到Vue的filters过滤器了。

let vm = new Vue({
  el: ‘#app',
  data: {
    num1: 33.141,
    num2: 46.212,
    num3: 78.541
  },
  // 过滤器
  filters: {
    toInt(value) {
      return pareseInt(value)
    }
  }
})

参数对象处理el和data属性之外,还多了一个filters属性,它的值也是一个对象,里面定义了一个叫toInt()的方法,传入了一个value的参数,函数的作用就是把传入的参数value,简单地转成一个整数,并return回去。
如果toInt()函数的写法你看起来觉得陌生的话,这样写你会不会觉得熟悉很多:

// 过滤器
filters: {
  toInt: function(value) {
    return parseInt(value)
  }
}

这是ES5的语法,我们后面都会使用ES6的最新写法,如果还不是很了解,建议先学习一下ES6的相关教程。
回到过滤器filters,定义完filters属性后,接下来怎么做呢?

<div id="app">
  数字1:{{ num1 | toInt }}<br>
  数字2:{{ num2 | toInt }}<br>
  数字3:{{ num3 | toInt }}
</div>

如上代码所示,通过管道符 | 把函数toInt放到变量后面即可,num1,num2,num3会分别作为参数value传入toInt(value)方法进行运算,并返回一个整数。
我们运行后得到的结果:


过滤后的效果.png

2、computed 计算属性



有时候,我们拿到一些数据,需要经过处理计算后得到的结果,这才是我们要展示的内容。
比如:我们有三个数,但需要展示的是三个数字之和。这种情况,就适合我们的计算属性computed。

let vm = new Vue({
  el: '#app',
  data: {
    num1: 1,
    num2: 3,
    num3: 6
  },
  // 计算属性
  computed: {
    sum() {
      return this.num1 + this.num2 + this.num3
    }
  }
})

计算属性computed的定义语法和过滤器filters类似,但是用法不一,如下:

<div id="app">
  总和:{{ sum }}
</div>

计算属性computed用法更简洁,仅需{{ sum }}就能读取到它的计算结果:1+3+6结果应该为10。


计算结果.png

需要注意的是,sum的值是依赖data中的数据num1,num2,num3的值,一旦它们发送了变化,sum的值也会自动更新。
我们试一下,通过chrome控制台把num1的值从1变成2,再看看sum的结果会是多少?


效果图.png

3、methods 方法



顾名思义,在methods中,我们可以定义一些方法,共组件使用。
比如,我们定义一个数据a,当用户点击按钮的时候,a的值加1。这种情况,我们可以利用methods来实现。

let vm = new Vue({
  el: '#app',
  data: {
    a: 0
  },
  // methods方法
  methods: {
    plus() {
      return this.a++
    }
  }
})

定义一个plus()的方法在methods中,下面我们把plus()绑定在按钮的点击事件上:

<div id="app">
  {{ a }}
  <button @click="plus"> +1 </button>
</div>

在Vue中通过@指令来绑定事件,@是v-on:的简写形式,以后都用@来绑定事件。当我们点击按钮时,methods中的方法plus()就会被调用,实现给a的加1的操作,并更新视图。

4、watch 观察



watch选项是Vue提供的用于检测指定的数据发生改变的api。
上面点击按钮a的值加1的例子,不就是数据发生变化了吗?我们就用watch选项来监听数字a是否发生了变化,如果监听到了变化,我们就在控制台输出以下a的最新值。
在上个例子的代码基础上,我们加上watch部分的代码:

let vm = new Vue({
  el: '#app',
  data: {
    a: 0
  },
  methods: {
    plus() {
      return this.a++
    }
  },
  watch: {
    a() {
      console.log('发生了改变,最新值为:')
      console.log(this.a)
    }
  }
})

最后一部分watch就是我们新加的代码,a()表示我们要观察监听的就是数据a,我们看运行结果:


效果图.png
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容

  • Vue实例的参数有el(指定挂载的DOM元素),data(实例的数据),还可以定义其他参数;vue实例会用到的4个...
    hiddensmile阅读 1,314评论 0 2
  • 0.linux启动的步骤 设备加电----》BIOS自检-----》grub引导启动-----》加载内核----》...
    萌面大叔2阅读 774评论 0 1
  • 11js关系运算符 <!DOCTYPE html> 11js关系运算符 /*关系运算符存在的意义:1、默认情况下,...
    ouyangqinbin阅读 337评论 0 0
  • import Foundation print("1","2","3","4"); //输出多个字符串,并用“**...
    风的低语阅读 466评论 0 0
  • 渲染: 1 当前屏幕渲染:在GPU的当前屏幕缓冲区中进行的渲染 2 离屏渲染:在GPU当前屏幕缓冲区外另建缓冲区渲...
    adrian920阅读 379评论 0 0