vue总结

Vue基础入门看了这一篇就够了

1. 了解Vue

咳咳 ~ 首先vue是一个渐进式框架,采取MVVM思想

MVVM思想:

  • M: model 数据
  • V: view 模板
  • VM: 数据模板,意思就是将数据和模板相连起来,可以双向驱动,数据驱动视图,视图驱动数据
    补充: Vue2.0采用的是数据劫持方式实现(Object.defineProperty) 然后Vue3.0是用的es6语法的反向代理(Proxy)

然后介绍vue的优缺点以及特性

  • 特性: 双向数据绑定,指令,插件化
  • 优点: 简单,易用,灵活,轻量级的框架
  • 缺点: 不利于SEO (浏览器搜索引擎) 优化 , 封装严实

2. Vue指令

Vue指令使用,直接填加到想添加的html标签上,列如: <div v-html="html"></div>,html是data中申明的变量,v-html是vue自带指令, 好 OK,知道怎么使用的,接下来我们看一下有哪些指令,指令拥有什么样的功能,指令本质上是html中的自定义属性

  • v-text 将指令的属性值渲染到页面,不识别html标签

  • v-html 将指令的属性值渲染到页面,识别html标签(一般用于ajax请求后台返回html时)

  • v-cloak 不需要属性值,解决页面闪动
    补充: 以上三个标签存在共同点,都可以解决闪动,为什么会闪动那呢,有时候网速很卡的时候,vue还没编译过来,页面就已经加载了,就会出现闪动问题

  • v-if v-else-if v-else 页面判断指令

    <div v-if="type === 'A'">
      A
    </div>
    <div v-else-if="type === 'B'">
      B
    </div>
    <div v-else-if="type === 'C'">
      C
    </div>
    <div v-else>
      Not A/B/C
    </div>
    
  • v-for 循环数组也可以循环对象 语法格式div v-for="(item,index) in items" :key="item.id"> key是循环出来的元素的唯一识别,优大大说添加这个key性能会好一点哦,key注意点 , 有相同父元素的子元素必须有独特的 key。重复的 key 会造成渲染错误。
    补充: 当和 `v-if` 一起使用时,`v-for` 的优先级比 `v-if` 更高 总而言之,言而总之,不推荐 v-if 和 v-for 写在一个标签上 具体看这个

  • v-show 根据属性值之真假值,切换元素的 display CSS 属性。
    补充: v-if 与 v-show 区别 v-if加载具有惰性加载,如果第一次属性值为false,那么就不会在DOM树中创建该节点,然后如果切换状态 v-if 会不停的删除添加DOM节点 而v-show是操作绑定节点的display属性

  • v-on 绑定事件监听器。可以简写为@事件名 属性值为一个函数调用如果不加括号默认传递时间对象给函数,如果加了括号想传事件对象,fn( $event) $event可以写在实参的任意位置
    2.4 Vue v-on新增对象写法 但是使用对象语法时,是不支持任何修饰器的
    .native 修饰符将一个dom事件绑定到组件根元素上

    <!-- 普通v-on -->
    <input v-on:keyu="onEnter">
    @click.native
    <!-- 对象语法 (2.4.0+) -->
    <button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
    
    

事件修饰符

.stop - 调用 event.stopPropagation()

.prevent - 调用 event.preventDefault()

.capture - 添加事件侦听器时使用 capture 模式。

.self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。

.{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。

.native - 监听组件根元素的原生事件。

.once - 只触发一次回调。

.left - (2.2.0) 只当点击鼠标左键时触发。

.right - (2.2.0) 只当点击鼠标右键时触发。

.middle - (2.2.0) 只当点击鼠标中键时触发。

.passive - (2.3.0) 以 { passive: true } 模式添加侦听器

  • v-bind 动态绑定属性可简写为 :class 更详细的请看vue官方档,在此不一一介绍,太多了

    // 此时类名aaa为一个字符串
    <div class="aaa"> </div>
     
    //此时类名aaa为一个变量  补充:可以存在一个动态class和一个静态class并存 vue最后会进行合并
    <div :class="aaa" class="bbb"> </div>
    
  • v-model 双向数据绑定, 只限于表单元素
    修饰符:

    • .lazy - 取代 input 监听 change 事件
    • .number - 输入字符串转为有效的数字
    • .trim - 输入首尾空格过滤
  • v-slot 插槽指令 可简写为#  剩余组件化开发中讲解

    <base-layout>
    	<template v-slot:header || #header>
        	Header content
     	</template>
    </base-layout>
    
  • v-pre 不通过vue编译直接显示原数据

  • v-once 只编译一次,之后数据改变也不会进行改变

2.1 自定义指令详解 directive

首先先介绍一下自定义指令如何定义以及内接收的参数,定义自定义指令拥有两种方法,一种为全局定义,通过Vue.directive API操作 列:

// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el,binding,vnode) {
    // 聚焦元素
    el.focus()
  }
})

// 注册一个组件自定义指令 `v-focus`
directives: {
  focus: {
    // 指令的定义
    inserted: function (el,binding,vnodel) {
      el.focus()
    }
  }
}


自定义指令中的钩子函数:

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

  • unbind:只调用一次,指令与元素解绑时调用

钩子函数中的参数:

  • el:指令所绑定的元素,可以用来直接操作 DOM 。
  • binding:
    一个对象,包含以下属性:
    • name:指令名,不包括 v- 前缀。
    • value:指令的绑定值,例如:v-my-directive=“1 + 1” 中,绑定值为 2
    • oldValue:指令绑定的前一个值,仅在 updatecomponentUpdated 钩子中可用。无论值是否改变都可用。
    • expression:字符串形式的指令表达式。例如 v-my-directive=“1 + 1” 中,表达式为 “1 + 1”。
    • arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"
    • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }。
  • vnode:Vue 编译生成的虚拟节点。移步 VNode API 来了解更多详情。
  • oldVnode:上一个虚拟节点,仅在 updatecomponentUpdated 钩子中可用。

然后还可以动态获取自定义指令参数 通过接收自定义指令接收参数的对象.arg获取, 还可以接收对象类型参数

 <p v-pin:[direction]="200">I am pinned onto the page at 200px to the left.</p>
 <p v-pin:[direction]="{name: 'zs',age: 18}">I am pinned onto the page at 200px to the left.</p>
// direction: 'left'
Vue.directive('pin', {
  bind: function (el, binding, vnode) {
    console.log(binding.value)  // 200  // {name:zs,age:18}
    console.log(binding.arg) // left
  }
})
2.2 Vue特殊属性 ref 使用方法
<!-- `vm.$refs.p` will be the child component instance -->
<p ref="p">hello</p>

<!-- `vm.$refs.child` will be the child component instance -->
<child-component ref="child"></child-component>

ref绑定在结构上,通过$ref.p访问获取该节点或者 该组件信息

ref注意点: 因为 ref 本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们 - 它们还不存在!`$refs` 也不是响应式的,因此你不应该试图用它在模板中做数据绑定

3. Vue生命周期详解,以及Vue内置方法

我相信执行完以下代码,你可以深刻理解vue生命周期了

<div id="app">
    <div id="gg">{{msg}}</div>
    <button @click='update'>更新</button>
    <button @click='destroy'>销毁</button>
  </div>
  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
  <script type="text/javascript">
    /*
      Vue实例的生命周期
    */
    var vm = new Vue({
      el: '#app',
      data: {
        msg: '生命周期'
      },
      methods: {
        update: function () {
          this.msg = 'hello';
        },
        destroy: function () {
          this.$destroy();
        }
      },
      watch: {
        msg() {
          console.log(this.msg);
        }
      },
      beforeCreate: function () {
        console.log('----------------beforeCreate----------------');
        console.log(this.msg);
      },
      created: function () {
        console.log('----------------created----------------');
        console.log(this.msg, this.$el);
      },
      beforeMount: function () {
        console.log('----------------beforeMount----------------');
        console.log(this.$el.outerHTML);
      },
      mounted: function () {
        console.log('----------------mounted----------------');
        console.log(this.$el.outerHTML);
      },
      beforeUpdate: function () {
        console.log('----------------beforeUpdate----------------');
        console.log(this.$el.outerHTML);
      },
      updated: function () {
        console.log('----------------updated----------------');
        console.log(this.$el.outerHTML);
      },
      beforeDestroy: function () {
        console.log('----------------beforeDestroy----------------');
      },
      destroyed: function () {
        console.log('----------------destroyed----------------');
      }
    });
  </script>
3.1 Watch函数 监听器详解

首先介绍监听器定义方法:

a: 1
watch: {
    a: function (val, oldVal) {
      console.log(val, oldVal) // 2   1
    },
    a: {
      handler: function...,
      // 添加deep属性开启深度监听,就可以监听对象,对象中任意属性改变都会触发该函数
      deep: true,
      // 该回调将会在页面加载完之后被立即调用
      immediate: true
    }
}
a = 2

注意: watch中不要使用箭头函数,箭头函数定义将会绑定作用域,导致访问不到vue实例

Vue.$nextTick

当页面加载完执行此函数的内容

this.$nextTick(function () {
        // DOM 现在更新了
        // `this` 绑定到当前实例
        console.log('dom更新了')
})
filter过滤器

过滤器常常用于用来处理数据格式,列如时间格式

首先还是老样子定义数据格式:

<!-- 在双花括号中 -->
// 其中 capitalize 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。
{{ message | capitalize('arg1', 'arg2') }}

<!--`v-bind`-->
<div v-bind:id="rawId | capitalize"></div>

filters: {
  capitalize: function (value,val1,val2) {
    console.log(val1,val2) // arg1  arg2
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
  }
}	

太累了,写不动了,组件和keep-alive下一次在更…(此处省略一万字)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Vue整合axios是指在Vue项目中使用axios库来进行网络请求。首先,需要创建一个Vue项目,可以使用vue-cli来快速搭建。然后,将axios库封装到项目中,可以在util文件夹中创建一个http.js文件来封装axios。在main.js中引入并添加到Vue的原型对象中。接下来,可以在项目中使用封装好的axios实例来发起异步请求。如果需要解决跨域问题,可以在开发环境中设置代理来实现跨域请求。需要注意的是,修改配置文件后需要重启项目才能使配置生效。在需要拦截请求或响应的地方,可以使用封装好的axios实例来发起异步请求;而在不需要拦截的地方,可以直接使用未封装的axios来发起异步请求。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Vue总结(二)—— 整合axios](https://blog.csdn.net/qq_43776195/article/details/123307777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [axios和vue的整合操作,还不来看看](https://blog.csdn.net/weixin_54217216/article/details/123943445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值