Bootstrap

VUE基础

一、vue-cli创建项目

二、

1、{{}}:文本插值/js表达式

2、v-html:将会覆盖子元素,有xss风险

3、computed和watch

  • computed有缓存,data里的数据不变,则不更新
  • watch默认是浅监听,若监听引用类型,需要深度监听(!监听引用类型拿不到oldValue?为什么呢)
    //watch监听引用类型,需要深度监听:
    watch:{
        //浅度监听
        test1(oldValue,newValue){
        },
        //深度监听
        test:{
            handler(oldValue,newValue){
            
            },
            deep:true
    }
    }
    

    4、class和style

:class="{class1:true,class2:false}"//class="class1";class名是否存在取决于属性值为true/false
:class="[class1,class2]"//class取决于,class1、class2变量值
:style="{fontSize:'10px',backgroundColor:'red'}"//使用驼峰命名

5、条件渲染

(1)v-if、v-else-if、v-else

(2)v-if和v-show区别:

v-if会导致dom重新销毁和重建,v-show一开始渲染后不会再销毁,只会通过display控制元素的显示和隐藏。v-if有更高的切换消耗;v-show有更高的初始渲染消耗。一般页面需要频繁切换的时候使用v-show。

6、循环列表渲染v-for(循环数组/对象)

  • 如何遍历数组(参数依次为数组项、下标)
  • 如何遍历对象(参数依次为值、键名、下标)
<ul>
 <li v-for="(value,key,index) in user">
    值:{{value}}
    键名: {{key}}
    下标:{{index}}
</li>
</ul>
  • key的重要性
  • v-for和v-if不能同时使用(v-if比v-for优先级高,一起使用在性能上会造成极大的浪费)

7、事件和事件修饰符

v-on:click等于@click

event.currentTarget:监听事件绑定的元素
event.target:触发事件的元素

  • 阻止单击事件冒泡:v-on:click.stop=""
  • 提交事件不再重载页面:v-on:submit.prevent
  • 将原生事件绑定到组件:v-on:focus.native
  • 修饰符串联:v-on:submit.stop.prevent

8、表单

v-model

修饰符lazy、number、trim

9、组件使用

(1)props

  • 子组件的props能够接收来自父组件数据。props是单向绑定的,即只能父组件向子组件传递,不能反向。
  • prop 着重于数据的传递,它并不能调用子组件里的属性和方法。

(2)$ref

  • $ref 着重于索引,主要用来调用子组件里的属性和方法。而且ref用在dom元素的时候,能使到选择器的作用,这个功能比作为索引更常有用到。

(2)$emit

$emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,并执行父组件中的event事件。

vm.$emit( event, arg )

(2)组件间通讯-自定义事件

mounted(title){
      //绑定自定义事件
   event.$on('ontitle',this.onEvent)
  },
beforeDestroy(){
     //及时销毁自定义事件 防止内存泄露
     this.$off('ontitle',this.onEvent)
  },
methods:{
    onEvent(key){
        console.log(key)
    }
}

//触发自定义事件
event.$emit('ontitle', '参数')

(3)组件生命周期

  • 挂载

beforeCreate在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。

created:实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

主要应用:调用数据,调用方法,调用异步函数

beforeMount:在挂载开始之前被调用,相关的render函数首次被调用(虚拟DOM),实例已完成以下的配置: 编译模板,把data里面的数据和模板生成html,完成了el和data 初始化,注意此时还没有挂在html到页面上。

mounted:挂载完成,也就是模板中的HTML渲染到HTML页面中,此时一般可以做一些ajax操作,mounted只会执行一次。

  • 更新

beforeUpdate在数据更新之前被调用,发生在虚拟DOM重新渲染和打补丁之前,可以在该钩子中进一步地更改状态,不会触发附加地重渲染过程。

updated在由于数据更改导致地虚拟DOM重新渲染和打补丁只会调用,调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作,然后在大多是情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环,该钩子在服务器端渲染期间不被调用。

  • 销毁

beforeDestroy实例销毁之前调用。在这一步,实例仍然完全可用。

destroyedVue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。

(4)子父组件生命周期执行顺序

父组件先开始渲染,等所有子组件渲染完成,父组件才算渲染完成。

父beforeCreate => 父created => 父beforeMount => 子beforeCreate => 子created => 子beforeMount=> 子mounted => 父mounted

10、vue高级特性

(1)自定义v-model

(2)$netxTick

  • Vue是异步渲染
  • data改变之后,Vue不会立刻渲染
  • $nextTick会在dom渲染之后被触发,以获取最新的dom节点

(3)slot插槽(父组件往子组件插入内容,子组件往父组件插入内容)

  • 基本使用
  • 作用域插槽(子组件往父组件插入内容)
  • 具名插槽

(4)动态组件(组件类型不确定)

  • :is="components-name"用法

(5)异步组件(需要的时候再引入,优化性能)

  • import()函数
//引入同步组件
import Paganition from '../components/paganition.vue'

export default{
    components:{
        Paganition,//同步
        MyTest:()=>import('../components/myTest.vue')//异步
    },
    data(){
        
    }
}
  • 按需加载,异步加载大组件

(6)keep-alive

  • 缓存组件
  • 频繁切换,不需要重复渲染
  • vue常见性能优化
  • 和v-show功能相似,v-show是从css层面控制的,keep-alive是从vue层面控制的

(7)mixin混入

import myMixin from './mixin'
import myMixin2 from './mixin2'

export default{
    mixins:['myMixin','myMixin2']
}

//mixin.js
export default{
    data(){
        return{
            }
    },
    methods(){},
    mounted(){}
}
  • 多个页面有相同的逻辑,抽离出来
  • mixin存在一定问题(数据来源不明确,不利于阅读;多mixin容易造成命名冲突)
  • vue3提出的composition API旨在解决这些问题

11、vuex

(1)用于vuex

  • state数据设计
  • getters
  • actions
  • mutaion

(2)用于vue组件

  • dispatch
  • commit
  • mapState
  • mapGetters
  • mapActions
  • mapMutaion

12、vue-router

  • 路由模式(hash、h5 history)
  • 路由配置(动态路由、懒加载)

13、vue原理

(1)MVVM

  • M: Model 层 (vuex,data)
  • V:View 层 (视图)
  • VM: ViewModel 层(methods事件、监听)

View 层通过 ViewModel 和 Model 做关联,像监听事件,监听指令等等。

在 Model 修改的时候,就能立刻执行 View 的渲染,View 层里面有什么点击事件,各种 DOM 事件监听的时候, 都可以去修改
Model 这一层的数据。所以说这就是数据驱动视图。通过修改 Model 数据去驱动视图 View。这个视图不用我们亲自操作。

(2)响应式

  • defineProperty(vue3.0使用Proxy)

在Vue中,模板会被编译为一个 render 函数,执行时,会获取 data 的值,即 getter 。getter 中,会触发响应式的绑定,即哪个属性被 getter 了,它就会被绑定响应式。以待它后面被修改时(即触发 setter)重新渲染。

  • 深度监听data变化

(3)虚拟dom和diff算法

(4)模板编译

(5)渲染过程

(6)前端路由

14、Vue面试题

(1)v-show和v-if区别

(2)vue在v-for中使用key

(3)生命周期

(4)vue如何通讯?

(5)描述组件更新渲染过程

(6)v-model实现原理

(7)对MVVM的理解

(8)computed有何特点

(9)ajax放在哪个生命周期

(10)如何自己实现v-model

11、多个组件有相同的逻辑,如何抽离

mixin

12、何时使用异步组件

  • 大组件
  • 路由懒加载

13、何时使用keep-alive

14、

15、插槽(作用域插槽、具名插槽)

16、虚拟dom

17、

18、

20、

21、

22、

 

;