16.vue学习①

61 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

开头

vue.prototype和vue.use的区别和注意点:

vue.prototype:实例上挂载属性/方法,例如Vue.prototype.axios = axios;

vue.use:引入插件,例如vuex,vue.use(vuex)

  • 区别:

1、不是为了vue写的插件(插件内要处理)不支持Vue.use()加载方式

2、非vue官方库不支持new Vue()方式

3、每一个vue组件都是Vue的实例,所以组件内this可以拿到Vue.prototype上添加的属性和方法。

  • 总结

Vue的插件是一个对象,

插件对象必须有install字段.

install字段是一个函数.

初始化插件对象需要通过Vue.use()

1.生命周期:

beforeCreated:开始前(还没有el)

created :开始(检测是否有el)

beforeMount :挂载前(存在了el,但是{{message}}数据还没有加载)

mounted :挂载完成(加载了{{message}})

beforeUpdate:更新前(数据更新前)

updated:更新完成(数据更新)

activated:被 keep-alive 缓存的组件激活时调用。

deactivated:被 keep-alive 缓存的组件停用时调用。

beforeDestroy:实例销毁前

destroyed:实例销毁

2.指令:

  • {{}}:Mustache指令。

  • v-once:

<h1 v-once>{{message}}</h1>

加入v-once指令可以让{{message}}不会跟着data值变化而变。

  • v-html:

<h1 v-html='url'></h1>

加入v-html可以在h1里面将html标签解析出来,有点想小程序的富文本,直接显示出”百度一下“可以点击的a标签。

{url:'<a url="www.baidu.com">百度一下</ a>'}

  • v-text:

<h1>{{message}}.其他</h1>

<h1 v-text='message'>.其他</h1>不灵活会覆盖原标签里面的内容

这两个一样的。

  • v-pre:

<h1 v-pre>{{message}}</h1>不会解析{{message}}原封不动的展示出来。

  • v-cloak:
<style> 

[v-cloak]{ 

display:none; 

} 

</style> 

<div v-cloak id="app">{{message}}</div> 

当网络延迟(vue解析之前)页面回显示出来{{message}}字符串,只有当message有值的时候才会替换,所以加上v-cloak可以在message没有挂载数据的时候不显示{{message}}字符串,当{{message}}有值后回自动删除c-cloak,用户体验好。

3.动态绑定属性:

  • v-bind:简写 :

小程序: src='{{img}}' Vue: :src='img' 或 v-bind :src='img' ;才可以和data里面的数据动态关联

Vue里面{{}}是在元素内容(content)里面才可以使用的,html标签上无法编译。

4.动态添加class:

  • 对象语法:

<div :class="{类名:Boolean,类名:Boolean}"></div>

<div :class="{active:is_active,time:is_time}"></div>

Vue根据is_active和is_time来判断是否在div里面的class加载active和active

(一样可以页面美观一些)

<div :class="getClass()"></div>

  • 数组语法:

<div :class="['active','time']"></div>目前active、time是两个字符

无法动态决定的。

<div :class="[active,time]"></div>目前active、time是两个变量,可以通过data动态决定

无法用对象语法一样判断是否需要展示出来class,只能都展示出来(里面的class还是可以通过data决定。)

(一样可以页面美观一些)

<div :class="getClassArray()"></div>

data:{is_active:true,is_time:false,active:'aaaa',time:'bbb'}, 

methods:{ 

getClass:function(){ 

return {active:this.is_active,time:this.is_time} 

}, 

getClassArray:function(){ 

return [this.active,this.time] 

} 

} 

5.v-key

  key是为了给Vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,需要为每项提供一个唯一的key属性。

6.v-bind:style :

<h2 :style="{key(属性名):value(属性值)}"></h2>

<h2 :style="{fontSize:'50px'}">00</h2>目前的50px是写死的

<h2 :style="{fontSize:finalSize}">00</h2>

<h2 :style="{fontSize:finalSize1+'px'}">00</h2>

<h2 :style="方法(和:class一样的)">00</h2>

data(){ 

return { 

finalSize:'100px', 

finalSize1:100 

} 

} 

7.计算属性:

<h2>{{fullName}}</h2>

data:{ 

firstName:'123456', 

lastName:'645321' 

}, 

// computed:计算属性(在{{}}不需要加(),直接名称 ) 

computed:{ 

fullName:function(){ 

return this.firstName+' '+this.lastName 

} 

} 

或:(计算属性完整写法 存在setter,getter 如果没有setter那么是一个只读属性)

computed:{ 

fullName:{ 

set:function(newValue){ 

console.log(newValue) 

} 

get:functione(){ 

return this.firstName+' '+this.lastName 

} 

} 

}

8.es6:

常量的含义是指向的对象没办法更改,但是可以更改对象内部的属性。

const obj={ 

nam:'ass' 

} 

obj.name='sss'(这样可以)

  • 变量增强写法:
const name='aaa' 

const age=12 

const obj={ 

name,age 

} 

(和 var obj={name:'aaa',age:12} 一样)

  • 函数增强写法:
const obj={ 

run(){} 

} 

(和 var obj={run:function(){} } 一样)

9.修饰符:

<div @click='one'> 

<div @click.stop='two'></div> 

</div> 
  • stop 修饰符,可以 在点击 执行 two方法时不执行 one方法,不让会都执行(阻止了one的事件冒泡 同 event.stopPropagation())

  • prevent 修饰符,阻止浏览器默认事件,如:浏览器右键, type='submit'自动提交 ,(同 event.preventDefault())

  • once 修饰符,事件只触发一次

监听按钮键帽的点击:

<input @keyup='keyup'>监听所有按钮

<input @keyup.enter='keyup'>只监听回车(也可以 @:keyup.13)

@:click.native 自定义组件点击事件

<cpn @click.stop></cpn>

10.input复用

vue因为出于性能等问题,回使用虚拟demo 如:在判断显示input,它不会加载两个input,而是一致使用一个input只是动态对比更改input里面的属性,导致input里面输入的值,会显示在另外判断显示出来的input中(需要加上key,让vue知道不需要复用)

11.vue更改对象数组 (响应式数据,和set一样强制重新渲染demo)

data:['1','2']

1.pop() (可以,删除最后一个元素) ✔

2.push(可以,可以追加多个元素) ✔

3.通过索引值修改数据。(this.data[0]='3' ,不可以,vue没有监听)

解决:

  • splice,替换

  • Vue.set(要修改的对象,索引值,修改后的值)。

4.shift() (可以,删除第一个元素) ✔

5.unshift() (可以,在数组最前面添加元素,可以添加多个元素) ✔

6.splice(index, 删除几个,修改内容) (可以,删除、插入、替换元素) ✔

7.sort() (可以,排序方法) ✔

8.reverse() (可以,反转、颠倒数组元素) ✔

9.Object.assign(this.data, this.data, this.options.data())) (Vue重置data, this.$options.data()获取data的初始状态)

this.$forceUpdate()强制刷新数据

12.过滤器:fliters

<div >{{price | showprice}}</div> 

data:{ 

price:100, 

}, 

// fliters过滤器 

filters:{ 

showprice(value){ 

 return '¥'+price.toFixed(2) 

} 

}