``三阶段:Vue的生命周期及相关信息``

2023-11-09

生命周期图

生命周期的钩子函数 *

  • beforeCreate :创建之前,预加载,里面没有数据
  • created :创建完成,数据请求,vue对象中东西都存在了
  • beforeMount :挂载之前,创建虚拟dom,没有渲染的,相关的虚拟dom优化
  • Mounted :挂载完成,实体dom,渲染完成,对于相关的内容进行操作
  • beforeUpdate :数据修改,数据已经发生变化,虚拟dom没有变化,阻止数据更改及相关的请求发送
  • updated :修改完成,提示,数据变化完成 虚拟dom发生改变,
  • beforeDestroy :销毁之前,没有销毁,提示,将一些内容先回收
  • destroyed :销毁完成,销毁完成,清除所有内容
    <div id="app">
        <button @click="msg='hi'">修改</button>{{msg}}
    </div>
    <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script>
    <script>
        let vm = new Vue({
            el: "#app",
            //有template优先读取template
            // template: " <b> 泥好孖 </b>",
            data: {
                msg: "hello"
            },
            //被动触发,和data同级
            beforeCreate() {
                console.log("创建之前");
            },
            created() {
                console.log("创建完成");
            },
            beforeMount() {
                console.log("挂载之前");
            },
            mounted() {
                console.log("挂载完成");
            },
            beforeUpdate() {
                console.log("更新之前");
            },
            updated() {
                console.log("更新完成");
            },
            beforeDestroy() {
                console.log("销毁之前");
            },
            destroyed() {
                console.log("销毁完成");
            },
        })
    </script>

vue的网络请求

自带的:vue.resource 网络请求(vue2.0 废弃)

第三方请求库Axios

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js的http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

Axios的特性

  • 在浏览器创建 XMLHttpRequests
  • 在node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应 (重点)
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防御XSRF

Axios基础使用及属性方法

相关属性

  • axios.defaults.baseUrl (根路径配置)
  • axios.defaults.timeout (超时时间配置)
  • axios.defaults.headers (请求头配置)

相关方法

  • axios.get
  • axios.post
  • axios.put
  • axios.patch
  • axios.delete
  • axios.options
  • axios.head
  • axios.all 发送多个请求(传入一个数组)
  • axios.create 创建一个请求函数

简单使用

get请求如下:

//get请求带参数的 {params:{}}
let {
    data
} = await axios.get("https://jsonplaceholder.typicode.com/todos", {
    //对象中包个属性为params 里面填写对应的参数
    params: {
        _limit,
        _page
    }
})

 post请求如下:

await axios.post('http://localhost:3000/todos',{
    "userId": 1,
    "title": "新增数据",
    "completed": false
})

 put请求如下:

await axios.put('http://localhost:3000/todos/12',{
    "userId": 1,
    "title": "修改数据",
    "completed": true
})

delete请求如下:

await axios.delete('http://localhost:3000/todos/13')

axios的封装

var request = axios.create({
    baseURL: 'http://localhost:3000',
    timeout: 3000,
})
//封装对应的axios
//请求拦截
request.interceptors.request.use(config => {
    //获取本地的token加入到对应的headers中
    config.headers["Authorization"] = "Bearer "+localStorage.getItem("token")
    return config;
}, error => {
    // Do something with request error
    console.log("请求出错")
    return Promise.reject(error);
});
//响应拦截
request.interceptors.response.use(response => {
    //使用localstroage 获取对应的token加入到本地
    let token = response.data.data.token
    //存入对应的localstroage中
    localStorage.setItem("token",token)
    return response;
}, error => {
    // Do something with response error
    //如果响应过期了 那么应该去登录页面
    console.log(error)
    if(error.response.status == 401){
        console.log("去登陆页面")
    }
    return Promise.reject(error);
});

使用如下:

let data = await request({
    method: "post",
    url: '/users/login',
    data: {
    username:'jack',
    password: '123'
    }
})

自定义指令

自定义指令的生命周期函数

  • bind :绑定的时候调用的
  • inserted :插入的时候调用
  • update :数据更新的时候调用
  • componentUpdated :组件更新的时候调用
  • unbind :解绑调用

相关的binding数据获取

  • binding.value :获取对应的填入的值(解析的)
  • binding.expression :获取填入的变量名
  • binding.arg :获取指令后携带的参数

全局自定义:

//directive方法 传递的是对应的指令名 传递一个对象(包含五个生命周期)
//全局自定义指令
Vue.directive('focus', {
    bind(el, binding, vnode) {}, //绑定的时候
    inserted(el, binding, vnode) {
        //当前的元素
        console.log(el);
        // binding对应的绑定的相关数据 得到对应的传过来的数据 :数据
        console.log(binding);
        console.log(binding.arg);
        console.log(binding.expression); //拿到变量名
        console.log(binding.value); //拿到值
        //vnode节点数据
        console.log(vnode);
        //获取焦点
        el.focus()
    }, //插入的时候
    update(el, binding, vnode, oldVnode) {}, //更新的时候
    componentUpdated(el, binding, vnode) {}, //组件更新的时候
    unbind(el, binding, vnode) {}, //解绑的时候
});
//模拟实现对应的v-html
Vue.directive('myhtml', {
    inserted(el, binding, vnode) {
        el.innerHTML = binding.value
    }
});

局部自定义:

new Vue({
    el: "#app",
    data: {
        msg:'hello',
        color:'yellow'
    },
    //局部自定义
    directives: {
        'color': {
            bind(el, binding, vnode) {},
            inserted(el, binding, vnode) {
                el.style.color = binding.value
            },
            update(el, binding, vnode, oldVnode) {},
            componentUpdated(el, binding, vnode) {},
            unbind(el, binding, vnode) {},
        },
    //模拟实现对应的v-on
        'myon':{
            inserted(el, binding, vnode) {
                console.log(binding.arg);
                console.log(binding.value);
                el.addEventListener(binding.arg,binding.value)
            }
        }
    },
    methods: {
        handler(){
            console.log('123')
        }
    },
})

调用:

<input type="text" v-focus>
<p v-myhtml="msg"></p>
<p v-color="color">111111</p>
<button v-myon:click="handler">点击</button>

filter过滤器

  • Array.prototype.filter (数组的过滤)
  • vue3移除了过滤器
     <div id="app">
        <!-- 调用fixed过滤器 -->
        {{db | fixed}}
        <!-- 支持传参 -->
        {{db | fixed(3)}} {{new Date() | format}}
        <!--同时调用多个过滤器-->
        {{db|a|b|c}}
    </div>
    <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
                db: 14.124784885
            },
            //过滤器定义
            filters: {
                //类似方法
                //小数点 保留小数
                fixed(data, i = 2) {
                    console.log(arguments)
                    return data.toFixed(i)
                },
                //日期转换
                format(date) {
                    let year = date.getFullYear()
                    let month = date.getMonth() + 1
                    let day = date.getDate()
                    return `${year}年-${month}月-${day}日`
                },
                a(v) {
                    return v + '你好'
                }
            }
        })
    </script>

 computed 计算属性

计算属性是用于计算值的 所以他可以当作值使用

    <div id="app">
        <input type="text" v-model="number1"> +
        <input type="text" v-model="number2"> =
        <input type="text" :value="sum"> {{sum}} {{sum1}}
        <button @click="sum1=20">设置值</button>
    </div>
    <script src="https://unpkg.com/vue@2.7.14/dist/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
                number1: "",
                number2: "",
                number3: 0
            },
            computed: {
                //基础版本 他的原理是对象中的getter和setter
                //默认的基础版本就是getter
                sum() {
                    return Number(this.number1) + Number(this.number2)
                },
                //完整版
                sum1: {
                    get() {
                        console.log('get调用了')
                        return '$' + this.number3
                    },
                    set(v) {
                        console.log('set调用了')
                        this.number3 = v
                    }
                }
            }
        })
    </script>

computed 和 methods属性里面的方法的区别

  • computed会缓存数据 只有当变化了他才重新编译
  • methods 每次调用都会重新编译
  • computed属性的效率高于methods
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

``三阶段:Vue的生命周期及相关信息`` 的相关文章

随机推荐

  • 【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM

    前言 DPDK 网络数据开发中文网开发中文网致力于整理收录dpdk spdk ovs vpp dpvs virtiohost sdn ovn qemu等方向 的github开源项目 资料文档 书籍 讲解视频 各大企业招聘信息 23 1 12
  • react hooks useCallback useMemo的区别

    最近在看react hooks useState和useEffect较好理解 到useCallback和useMemo的时候 看官网不太懂 后来通过查阅资料 算是搞明白了 下面实例都是基于react native 不过原理和react是一样
  • Oracle ADG自动切换脚本分享

    为大家分享一个 Oracle ADG自动切换 的脚本 由云和恩墨工程师HongyeDBA编写 支持Switchover Failover 下载链接 https www modb pro download 5 DG环境需求 DG使用服务名必须
  • Python之匿名函数lambda使用方法

    文章目录 一 lambda函数介绍 1 1 语法 1 2 特性 1 3 示例 二 结合内置函数 map filter 使用 2 1 python内置的map 2 2 python内置的filter 一 lambda函数介绍 1 1 语法 在
  • golang面试题:json包变量不加tag会怎么样?

    问题 json包里使用的时候 结构体里的变量不加tag能不能正常转成json里的字段 怎么答 如果变量首字母小写 则为private 无论如何不能转 因为取不到反射信息 如果变量首字母大写 则为public 不加tag 可以正常转为json
  • Android 如何从活动向碎片传递数据

    踩了些坑 做个笔记 方便以后看 方法一 利用碎片的setArguments 方法传递bundle 首先 先穿插一个活动间传递数据的方法 活动间传递数据 两种方法 方法一 直接使用intent提供的put方法 如putString putpu
  • Java操作pdf的工具类itextpdf

    一 什么是iText 在企业的信息系统中 报表处理一直占比较重要的作用 iText是一种生成PDF报表的Java组件 通过在服务器端使用Jsp或JavaBean生成PDF报表 客户端采用超链接显示或下载得到生成的报表 这样就很好的解决了B
  • TS学习(二) :安装ts与ts配置

    一 安装TypeScript npm i g typescript 二 安装完成后 创建ts 使用ts语法 可能遇到的报错问题 在啥都没配置的默认情况下 TS会做出下面几种假设 假设当前的执行环境是dom 如果 代码中没有使用模块化语句 i
  • vscode-server离线安装及配置

    vscode server离线安装及配置 八字环 博客园 cnblogs com 获取当前版本vscode的commit id Help gt About gt Commit 根据commit id下载对应版本的vscode server
  • 保留IP地址

    保留IP地址不会在互联网中使用 其主要被用在企业机构内部作为局域网地址使用 例如 我们经常用到192 168 1 等 保留地址主要在以下四类 A类 10 0 0 0 10 255 255 255 长度相当于1个A类IP地址 A类 100 6
  • 在k8s集群中Kubernetes仪表板dashboard使用RABC机制限制指定用户针对指定名称空间中的资源进行管理实践...

    公众号关注 WeiyiGeek 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 Dashboard 利用rbac机制限制指定用户针对指定名称空间中的资源进行UI管理 原文地址 https blog weiyi
  • 数据结构入门(二):顺序表

    目录 1 顺序表的概念 2 注意事项 3 接口的实现 4 顺序表的问题及思考 1 顺序表的概念 2 注意事项 在进行任意位置删除的时候 一定要注意是否越界 因为顺序表是以一个连续的线性表 3 接口的实现 3 1任意插入 头插和尾插 3 2任
  • \n,\r,\n\r的区别,windows、unix、mac中的换行区别

    转自 http www oschina net question 925405 132872 n 软回车 在Windows 中表示换行且回到下一行的最开始位置 相当于Mac OS 里的 r 的效果 在Linux unix 中只表示换行 但不
  • ALV FIELDCAT添加属性 – REUSE_ALV_FIELDCATALOG_MERGE函数

    在 ALV 定义 Fieldcat 的时候 我们往往需要通过 slis fieldcat alv 的赋值给Fieldcat导入结构 如上篇文章中给出的例子 01 02 03 04 05 06 07 08
  • sap doi技术操作excel的方法

    OLE是和微软OFFICE做接口 比较老的技术 DOI是SAP自己搞的 相对是后出来的技术 同样可以操作EXCEL 有一些方法 get sheets select range cell format set ranges format 等等
  • C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    C语言提供了几个标准库函数 可以将任意类型 整型 长整型 浮点型等 的数字转换为字符串 1 int float to string array C语言提供了几个标准库函数 可以将任意类型 整型 长整型 浮点型等 的数字转换为字符串 下面列举
  • 2021年浙大软院推免机试题解和复试准备建议

    今年参加了浙江大学软件学院的推免复试 分为机试和面试 复试成绩 机试成绩 15 面试成绩 85 虽然机试占比不大 但是相对来说在取消PAT考试成绩抵机试后 机试的难度相比PAT甲级考试略大 同学之间的差距也会比较大 且机试成绩会影响面试老师
  • 【three.js练习程序】拖动选中的物体

  • SpringMVC DispatcherServlet源码(2) 扫描Controller创建HandlerMapping流程

    Spring MVC向容器注册一个RequestMappingInfoHandlerMapping组件 他会扫描容器中的Controller组件 创建RequestMappingInfo并注册HandlerMethod映射关系 本文将阅读S
  • ``三阶段:Vue的生命周期及相关信息``

    生命周期图 生命周期的钩子函数 beforeCreate 创建之前 预加载 里面没有数据 created 创建完成 数据请求 vue对象中东西都存在了 beforeMount 挂载之前 创建虚拟dom 没有渲染的 相关的虚拟dom优化 Mo