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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值