vue学习

368 阅读5分钟

在b站学习vue的简单笔记 视频地址:www.bilibili.com/video/BV157…

ES6语法

1、let/var

var不是块级作用域,但let是

ES5之前因为if和for都没有块级作用域的概念,所以在很多时候,我们都必须借助于function的作用域来解决应用外面变量的问题。 ES6中加入了let,let有if和for的块级作用域 有5个按钮,想要实现点击哪个按钮就打印“哪个按钮被点击”,es5实现的代码如下,但是点击任何一个按钮打印出来的都是“第5个按钮被点击”。
因为addEventListener中function()内的i在for循环执行结束后已经变成了5
解决方法:闭包 (function(num){})(i)

2、const

const关键字

3、ES6中对象字面量增强写法

const obj = {}中,{}即为对象的字面量

4、for循环

在ES6中for循环有另外两种写法

for(let i in this.books){
    totalPrice += this.books[i].price
}

for(let book of this.books){
    totalPrice += book.price
}

vue的mvvm

MVVM分为三个部分:分别是M(Model,模型层 ),V(View,视图层),VM(ViewModel,V与M连接的桥梁,也可以看作为控制器)

  • M:模型层,主要负责业务数据相关;

  • V:视图层,顾名思义,负责视图相关,细分下来就是html+css层;

  • VM:V与M沟通的桥梁,负责监听M或者V的修改,是实现MVVM双向绑定的要点;

MVVM支持双向绑定,意思就是当M层数据进行修改时,VM层会监测到变化,并且通知V层进行相应的修改,反之修改V层则会通知M层数据进行修改,以此也实现了视图与模型层的相互解耦;

创建vue实例时可以传入的options

还有计算属性computed

vue的生命周期

vue的template(模板)

代码规范:最好缩进两个空格

CLI——脚手架,创建一个.editconfig文件,会对代码进行简单的规范

插值操作

1、mustache语法(也就是双大括号)

不可以在元素属性部分使用mustache语法

2、v-once(不常使用)

该指令后面不跟任何表达式,表示元素和组件只渲染一次,不会随着数据的改变而改变 eg. <h2 v-once>你好</h2>

3、v-html

该指令后面往往跟上一个string类型 会将string的html解析出来并且进行渲染
<h2 v-html="url"></h2>
url:"<a href="http://baidu.com">百度一下</a>"

4、v-text(一般不用)

与{{}}类似,但是不够灵活,比如{{}}后面可以直接加上其他内容,两个内容会拼接起来,但是用v-text时后面的内容就会被覆盖,而不会拼接起来
<h2 v-text="message"></h2>
message:"nihaoya"

5、v-pre(用的比较少)

用于跳过这个元素和他子元素的编译过程,用于显示原本的Mustache语法
比如message:"你好呀"
<p>{{message}}</p>中message的内容会被编译解析出来对应的内容
<p v-pre>{{messagr}}</p>会直接显示{{message}}

6、v-cloak(几乎不用)

cloak:斗篷
vue解析后会自动删除这个v-cloak属性

v-bind

  • 作用:动态绑定属性
  • 缩写(语法糖): :

1、v-bind的基本使用

<img v-bind:src="imgURL" alt="">
<a v-bind:href="aHref">百度一下</a>
<div :class="active"></div>

2、动态绑定class(对象语法)(用得很多)

v-bind后面的属性可以为一个对象(键值对,key:value)
<h2 v-bind:class={类名1:boolean,类名2:boolean}></h2>
当value为true时,这个value对应的key会被绑定到属性上去,value为false时对应的key则不会被绑定上去

例如:点击按钮改变文字颜色,代码如下

v-bind后面属性的值也可以放在method或者computed(计算属性)里面

<h2 class="title" :class="getClasses()"></h2>

<script>
……
methods:{
    getClasses:function(){
        return{active:this.isActive,line:this.isLine}
    }
}
</script>

3、动态绑定class(数组语法)(用的比较少)

<h2 class="title" :class="[active , line]"></h2>
<script>
    const app = new Vue({
        el:'#app',
        data:{
            active:'aaa',
            line:'bbb'
        }
    })
</script>

计算属性

1、计算属性的基本使用

当两个数据拼接时,可以使用methods

也可以通过计算属性computed实现,这里mustache里面写的形式就是数据,而不是带括号的方法

2、计算属性的复杂操作

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

3、计算属性的getter和setter

之前computed内的内容实际是简写形式,完整的内容如下

set方法一般不实现,所以可以删去

完整内容与简写的对比

4、计算属性与methods的对比

v-if、v-else和v-else-if

但是在复杂的情况下,更好的方法是使用计算属性computed,代码如下——

v-for

v-for遍历对象

组件的key属性

购物车案例

过滤器 filter

  <table>
    <thead> <!--表头-->
    <tr><!--行-->
      <th></th><!--表头单元格-->
      <th>书籍名称</th>
      <th>出版日期</th>
      <th>价格</th>
      <th>购买数量</th>
      <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <tr v-for="item in books">
      <td>{{item.id}}</td>
      <td>{{item.name}}</td>
      <td>{{item.date}}</td>
      <td>{{item.price | showPrice}}</td>
      <td>
        <button>-</button>
        {{item.count}}
        <button>+</button>
      </td>
      <td><button>移除</button></td>
    </tr>
    </tbody>
  </table>
  
    filters:{
    showPrice(price){
      return '¥'+price.toFixed(2)
    }
  }

vue底层原理

1、vue数据双向绑定的实现原理

vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。

www.jianshu.com/p/78b31df97…