vue知识点总结(一)

VUE是什么

vue是一套用来构建用户界面的JavaScript框架
在学习vue之前,必须要有HTML、CSS、JavaScript的扎实基础
当前vue的最新版本是2.x

VUE的使用

  1. 使用script标签引入
  2. 使用vue-cli来快速搭建脚手架

VUE实例

每一个vue应用都是通过用vue函数来创建一个vue实例开始的:

var vm = new Vue({
    //选项
})

每一个vue应用,都是由一个通过new Vue创建的根Vue实例和可选的、可嵌套的、可复用的组件树组成。

data对象

vue中的data对象里,在vue实例创建的时候,在其响应式系统中加入了所有能在data中找到的属性,当这些属性的值发生改变的时候,视图也会响应,一起改变。

var vm = new Vue({
  data: data
})

除了数据属性,vue实例中还暴露了一些有用的实例属性和方法。它们都有前缀$,可以和用户定义的属性区分开来

模板语法

文本

数据绑定最常见的是“mustache”语法,也就是双大括号:

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

双大括号里的内容将会被替代为数据对象上面的msg属性的值,如果绑定的这个属性的值发生改变,那么大括号内的内容会跟着更新。
在数据绑定里,还可以支持JavaScript表达式(非语句)。

内部指令

vue内部可以使用在HTML上,HTML会根据这些指令来执行对应的任务,响应式地作用于dom。

v-html

双大括号里会把数据解释为普通文本,而不是HTML,所以如果想输出真正的HTML,那就要使用v-html命令:

<p>Using v-html directive: <span v-html="rawHtml"></span></p>

v-bind

假如你想像双大括号语法一样修改HTML的属性,那么这时候用双大括号就不行了,需要使用v-bind语法:

<div v-bind:id="dynamicId"></div>

这个指令还有一个常用的缩写形式:

<a :href="url"></a>

v-on

这个指令可以用来监听DOM事件,并在触发时运行一些JavaScript代码

<button v-on:click="counter += 1">Add 1 </button>

v-on里还可以接受一个需要调用方法的名称。
如果需要在内联语句处理器中访问原始的DOM时间,可以使用特殊变量$event把它传入方法。

vue还为v-on提供了事件修饰符:

  • .stop 阻止事件继续传播
  • .prevent 提交的事件不再阻止页面
  • .capture 添加事件监听器时使用事件捕获模式
  • .self 只当在event.target是当前元素自身时触发处理函数
  • .once 点击事件将只触发一次
  • .passive 滚动事件的默认行为将会立即触发

按键修饰符

<input v-on:keyup.13="submit">

除了根据keycode来调用键值,还可以使用vue提供的别名,比如enter等。

条件渲染 v-if

条件渲染可以根据条件来决定是否渲染dom:

<h1 v-if="ok"></h1>

也可以使用v-else来添加一个else块,v-else元素必须跟在v-if 的后面。还有v-else-if。

当想切换多个元素的时候,可以在template元素上使用v-if,template就可以当做不可见的元素。

假如两个模板使用了相同的HTML元素,在进行切换的时候,这个元素是不会更新的,这时候就可以使用key值来给这个元素做一个绑定,这个key值是唯一的,因此同一个元素上绑定的两个key值可以让这两个元素都是独立的。

v-show

这个命令可以根据条件选择是否展示元素。

<h1 v-show="ok">Hello!</h1>

v-if 和v-show的区别

v-if是真正的条件渲染,在切换的时候会有适当的销毁和重建,如果是假,那么就会什么也不渲染。
而v-show则是一个改变元素display的指令,只是基于CSS的切换。

v-for

v-for可以根据一组数据的选项列表来进行渲染,语法比较特殊:

<ul id="example-1">
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})

其中的items是原数据数组,定义在data里,而item则是数组元素迭代的别名。也可以取整数表示重复。

v-for还支持一个可选参数,当做数组的索引。

<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>

其中的in也可以被of所替代 。

v-for还可以操作对象,通过一个对象的属性来进行迭代。如果设置第二个参数key,那么就是属性名。

当使用v-for的时候,如果更新已经渲染的元素列表,那么v-for会就地复用,为了方便它可以跟踪每一个节点的身份,所以必须要给一个key值,每项都有唯一的id。

变异方法

这些针对于数组的方法都能够改变原始数组,而非变异方法则不会改变原始数组,而是返回一个新的数组。
和原生js的数组操作方法一样,如push()等。

v-for和v-if

v-for和v-if处于同一节点的时候,v-for比v-if的优先级要高。

表单输入绑定

可以使用v-model指令在表单元素上创建双向绑定。

<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}</p>

表单输入绑定的修饰符

  • .lazy修饰符可以转变为使用change事件时进行同步
  • .number 如果想自动给用户的输入值转为数值类型
  • .trim 如果要自动过滤用户输入的首尾空白字符

class与style绑定

我们可以给v-bind:class传一个对象,动态的切换class:

<div v-bind:class="{ active: isActive }"></div>

方法、计算属性与侦听器

数据我们可以定义在data里,方法我们可以定义在methods里。
当然,除了方法之外,还有一些复杂的逻辑,我们可以使用计算属性。

<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: {
    // 计算属性的 getter
    reversedMessage: function () {
      // `this` 指向 vm 实例
      return this.message.split('').reverse().join('')
    }
  }
})

与方法不同,计算属性是基于它们的依赖进行缓存的,只在相关依赖发生改变时才会重新求值。

Vue还提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

var watchExampleVM = new Vue({
  el: '#watch-example',
  data: {
    question: '',
    answer: 'I cannot give you an answer until you ask a question!'
  },
  watch: {
    // 如果 `question` 发生改变,这个函数就会运行
    question: function (newQuestion, oldQuestion) {
      this.answer = 'Waiting for you to stop typing...'
      this.debouncedGetAnswer()
    }
  }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 3,541评论 0 6
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,221评论 0 25
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 11,024评论 4 129
  • 2000年的小镇,平静而又破败,时间在这里总是减缓流逝的速度。几座石桥错落在一条被浮藻染绿的河道上,河岸边的粗糙柏...
    闲人赤阅读 134评论 0 0
  • 陪伴就是最长情的告白
    冬12日阅读 240评论 0 0