Vue基础

1、vue的特点

1.三大前端框架

目前前端有两个非常流行的框架,非别是reactjs,vuejs。而这三个当中,vuejs的受欢迎度目前是最高的,而开发vuejs的就是一个中国人尤雨溪。

1.2 vue的优势

  • Vue致力解决的问题与React一致,但却提供了另外一套解决方案。Vue使用模板系统而不是JSX,使其对现有应用的升级更加容易
  • Vue的开发者尤雨溪是中国人,框架本身提供了大量丰富的中文文档,这也为Vue的发展和使用带来巨大的优势。
  • Vue框架适合于需要快速上手、上线的应用,还适用于迁移传统的多单面应用。

2、vue的下载和使用

2.1直接用<script>引入

2.2 使用CDN

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

什么是MVVM(前后端分离)

M:model 模式存储数据

V:view 显示内容(html)

VM viewModel视图模块 连接视图与modelcompon模型 (

当model数据发生变化.时候通过VM可以监听变化更新视图

当view视图发变化时候通过VM可以监听变化自动更新model数据

3.1 vue的模版

<div id="app">
  <button @click="change">改变数据</button>
  <!-- {{}}里是js的表达式 -->
  <h1>{{msg - 8}}</h1>
</div>

3.2 vue的实例化

// jquery是以DOM做为驱动
// Vue是以数据做为驱动

let vm = new Vue({
  // 挂载点
  el: "#app",
  data: {
    //只有注册在data当中的数据才是响应式数据,数据改变,会触发视图的重新渲染
    msg: 'hello world'
  },
  // 方法
  methods: {
    change(){
      // this等价于vm这个vue的根实例
      this.msg = 'hahaha';
    }
  }
})

4.插值语法

数据

let vm = new Vue({
	data: {
    msg: "hello"
  }
})

模版

<h1>{{msg}}</h1>   
<h1>{{msg - 8}}</h1>

5.vue指令

指令的属性值为js表达式

5.1 v-html

可以解析html标签

<h1 v-html="msg"></h1>
<h1 v-html="msg + 'world'"></h1>

5.2 v-text

不能解析html标签

<h1 v-text="msg"></h1>

5.3 v-bind

绑定动态属性

<h1 title="msg">1111</h1>
<h1 v-bind:title="msg">2222</h1>
<h1 :title="msg">2222</h1>

5.4 v-on

5.4.1 事件绑定

js 数据

var vm = new Vue({
    el: '#app',
    data: {
        isShow: false,
        msg: '1111'
    },
    methods: {
        //没有参数的绑定
        show(){
            this.isShow = true;
        },
        //有参数的绑定
        change(newVal){
            this.msg = newVal;
        },

        //获取事件对象
        get(e){
            console.log(e);
        },
        //获取事件对象
        get(newVal,e){
            this.msg = newVal.isShow;
            console.log(e);
        }
    }
});

模版

<p v-on:click="show">显示</p>
<p @click="show">显示</p>
<p @click="change('hello')">改变msg</p>
<p class="box" @touchmove="get">改变msg</p>
<p class="box" @click="get('hello',$event)">改变msg</p>

5.4.2 事件绑定的修饰符

  • v-on:keyup.enter.13 按键修饰符
  • v-on:click.stop 阻止冒泡
  • v-on:click.prevent 阻止浏览器默认行为

5.5 v-if v-else-if v-else

条件渲染指令

v-if:如果表达式为真,则渲染该元素,如果为假,则不渲染(dom不存在)

v-if和v-else之间不能有其它内容

<p v-if="count > 80">红色</p>
<p v-else-if="count > 60">蓝色</p>
<p v-else>绿色</p>

5.6 v-show

条件渲染指令

如果表达式为真,则显示该元素,如果为假,则隐藏该元素(dom存在)

<p v-show="0">红色</p>

v-if与v-show的区别

  • 都可以隐藏节点
  • v-show通过css方式隐藏
  • v-if 直接移除dom节点
  • 频繁切换显示与隐藏用v-show反之用v-if

5.7 v-for

列表渲染指令

new Vue({
   data: {
     arr: ['Amy', 'Rose', 'Black'],
     person: {
       name: 'Rose',
       age: 34,
       class: 'H5'
     }
  }
})

5.7.1 遍历数组

<li v-for="item in arr">{{item}}</li>
<li v-for="item of arr">{{item}}</li> -->
<li v-for="(item,index) in arr">{{item}}----{{index}}</li>

5.7.2 遍历对象

<li v-for="item in person">{{item}}</li> -->
<li v-for="(item,key) in person">{{key}}-----{{item}}</li>
<li v-for="(item,key,index) in person">{{index}}----{{key}}-----{{item}}</li>

在vue-for循环中为什么要绑定key

key为了让vue虚拟dom节点查找与更新更加优化(优化dom的渲染)

vdom 优化diff算法:

        v-for为什么要加key,因为兄弟节点之间要求key必须保持唯一性,key可以提高diff算法,
         提高列表在排序或者是筛选时的渲染速度

5.8 v-model

双向数据绑定

js数据

new Vue({
  data: {
    tel: '123'
  }
})

Vue2 响应式原理,(双向绑定的原理)

通过订阅与发布者模式结合

通过Object.defineProperty劫持对象的getter与setter

观察者来连接视图与数据

当数据发生变化时候通知说要订阅该数据的订阅者

模版

Vue3响应式原理

ES6新增的 proxy代理实现的

vue3 与Vue2的区别

响应式原理不同:Object.defineProperty和Proxy

启动方式不同

vue2
new Vue({
    store,
    router,
    render:h=>h(App)
}).$mount("#app")
// vue3
createApp(App).use(store).use(router).mount("#app")
// vue2
Vue.prototype.$http = axios;
// vue3
app.config.globalProperties.$http = axios;
Vue3 增加了setup 组合式api

<p>请输入手机号:<input type="text" v-model="tel"></p>
<p>{{tel}}</p>

5.9 v-once

只渲染一次

<span v-once>This will never change: {{msg}}</span>

什么是生命周期? 
          生命周期就是vue实例从创建到销毁的全过程,也就是 new Vue() 开始就是vue生命周期的开始。Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom-->渲染、更新-->渲染、卸载 等一系列过程,称这是Vue的生命周期

生命周期的钩子函数:

        钩子函数是Vue生命周期中每个阶段对外开放让程序员操作Vue的接口。Vue有8个钩子函数。

                beforeCreate( ){ }  实例创建前

                因为此时vue实例还没有创建,那么就无法访问到 data 中的数据,并且 dom 视图也没有更新,所有的结构都停留在原始的状态

                create( ){ }   实例创建后

                这里是,最早能够调用 data 数据和 methods 方法的周期函数 ,此时,data 数据和 methods 方法已经可以调用,但是 dom 视图并没有更新

                beforeMount( ){ } 实例挂载前

                 在当前生命周期中,页面呈现的是原始 dom 结构,但是此时虚拟 dom 已经创建完成, 在 mounted 生命周期,会覆盖所有的 dom 所有的dom操作,均不奏效

                mounted( ){ } 实例挂载后

                在此周期之前的所有的dom操作,都不凑效,在这里可以做 dom 操作,并且所有的dom操作都能够展现出视图的变化

                beforeUpdata( ){ } 实例(试图)更新前

                在数据更新的时候触发;此时 data 数据是最新的,但是并没有更新到视图上,就是 数据视图内容不同步

                updated( ){ }  实例(试图)更新后

                数据更新后,此时数据是最新的,视图也是最新的,实现了数据 和 视图内容 双同步

                beforeDestroy( ){ }  实际销毁前

                实例销毁前,在这里是最后一次,能够访问的到 data 的数据和 methods 方法的生命周期

                destroyed( ){ }  实例销毁后

                实例销毁后,当触发了这个声明变量的时候,代表者,当前的vue实例已经被销毁的,所有的 data 数据 和 methods 方法,都不能用了

组件传参:


        父传子 在父组件中通过属性的方式向子组件传参  子组件中通过props接收参数

        子传父 在子组件中通过$emit调用父组件的自定义事件 在父组件的自定义事件中通过$event接收参数

        非父子关系:

        ref获取引用

        依赖注入:provide inject

        vuex

        vue2(选项options) envetBus传参”;$parent父对象,$chilren子对象 $root根节点

        

Vue 路由钩子函数


        路由钩子的执行流程,钩子函数种类有:全局守卫、路由守卫、组件守卫。        

        完整的导航解析流程:

                1、导航被触发。

                2、在失活的组件里调用 beforeRouteLeave 守卫。

                3、调用全局的 beforeEach 守卫。

                4、在重用的组件调用 beforeRouteUpdate  守卫(2.2+)。

                5、在路由配置里面 beforeEnter。

                6、解析异步路由组件。

                7、在被激活的组件里调用 beforeRouteEnter。

                8、调用全局的 beforeResolve 守卫(2.5+)。

                9、导航被确认。

                10、调用全局的 afterEach 钩子。

                11、触发 DOM 更新。

                12、调用 beforeRouteEnter 守卫中传给next的回调函数,创建好的组件实例会作为回调函数的参数传入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值