深度学习Vue框架生命周期(三)

news2024/11/28 18:48:56

一.什么是生命周期?

在vue中,生命周期就是vue实例程序从创建到销毁的这个过程,在生命周期中,不同阶段我们可以做不同的事情。vue的生命周期是创建阶段、挂载阶段、更新阶段、销毁阶段

 二.什么是钩子函数?

钩子函数就是生命周期中的回调函数,在vue中,有8个生命周期的钩子函数

------------>创建阶段

创建之前执行的钩子函数     beforeCreate 

创建后执行的钩子函数          created       用来做初始化数据

------------->挂载阶段    

挂载之前执行的钩子函数      beforeMount

挂载后执行的钩子函数          mounted     进行dom操作

------------------>更新阶段    数据发生改变才执行的回调函数

更新之前执行的钩子函数      beforeUpdate

更新之后执行的钩子函数       updated     

------------------->销毁阶段    程序的卸载   ,显示和隐藏  v-if

 销毁之前执行的钩子函数   beforeDestroy

销毁之后执行的钩子函数     destroyed

 三.组件

1.什么是组件

组件就是一个功能 ,相当于vue实例,可复用的vue实例

定义全局组件 

//1.全局定义组件
 const ElButton = {
        // 设置数据
        data() {
           return {
              message: "这是一个按钮123"
           }
        },
        // 渲染模板
        template: `
            <div>
                <div>{{message}}</div>
               <button @click="foo" style="padding: 10px 20px; border: 0; background-color: skyblue; color: white;">
                  点击按钮
                </button>   
            </div>
        `,
        // 设置方法
        methods: {
            // 提示
            foo(){
                alert("您好,触发事件。。。")
            }
        }
    }
2.注册全局组件
Vue.component('el-button',ElButton)

定义局部组件 

 new Vue({
        //挂载容器
        el: "#app",
        // 注册组件(此处表示局部注册)
        components: {
            // 此处注册组件名称采用驼峰命名“ElSearch”,在使用的时候需要改成 “el-search”
            // "el-search": {},
           "ElSearch": {
                data(){
                    return {

                    }
                },
                template: `
                    <div>
                        <input type="text" placeholder="请输入关键字" style="width: 90%;height: 40px;">    
                    </div>
                `
           },
        }
    })

2.注册组件时需要注意的事项!!!

1.采用驼峰命名法注册组件名称时“ElSearch”,使用组件时需要改用短横线 “el-search

2.不能使用html文档内置的标签名称作为组件名称例如    div   hearder footer nav   

可以采用自定义的   例如Elbutton  ComHeader

3.组件  中的data  必须返回的是一个对象         data(){}

4.template 选项需要有根节点   <div></div>

5.组件中的属性计算、侦听、过滤以及生命周期的钩子函数和vue实例写法一致

3.组件嵌套关系 (父组件嵌套子组件)

//定义子组件
 const ElementChild = {
        template: `
            <div>
                <h3>子组件</h3>
            </div>
        `
    }
//定义父组件
 const ElementParent = {
        template: `
            <div>
                <h2>父组件</h2>
                <element-child></element-child>
            </div>
        `,
        // !!!注意是在父组件中注册子组件
        components: {
            ElementChild
        }
    }

new Vue({
        //挂载容器
        el: "#app",
        // 在vue实例中注册父组件
        components: {
            ElementParent
        }
    })

四.组件传值

1.父组件传值给子组件(自定义属性)

父组件传值给子组件,子组件通过props自定义属性,在父组件的template中的子组件中,通过v-bind绑定那个自定义属性,传入父组件的数据

 const ElementChild = {
      //  父组件传值需要子组件自定义属性
      // 通过在props选项中自定义属性接收父组件传递的数据  props: ['xxx'],
      props:{
        xxx:{
          // 未传参数
          default:'默认值',
          // 传递了参数
          type:[String,Number]
        }
      },
        template: `
        <div>
        <h3>子组件</h3>
        <p>{{xxx}}</p>
        </div>
        `,
      };

   // 父组件
    const ElementParent = {
            // 设置数据
            data(){
                return {
                  // 传值数据可写可不写(但必须要有自定义的操作)
                    message: "这是父组件的数据"
                }
            },
            template: `
                <div>
                    <h2>父组件</h2>
                    <element-child v-bind:xxx="message"></element-child>
                    <element-child :xxx="100"></element-child>
                    <element-child></element-child>
                </div>
            `,
            // 在父组件中注册子组件
            components: {
                ElementChild
            }
        }

2.子组件传值给父组件(事件)

子组件的数据,在初始化钩子函数中通过this.$emit(自定义事件,数据),在父组件中通过methods定义方法get(data){}接收该数据,在父组件的template子组件中使用该自定义的事件   @自定义事件="get"


      // 要定义了子组件才能用在父组件上
      const ElementChild = {
        data(){
          return {
            num:100
          }
        },
        template: `
        <div>
        <h3>子组件</h3>
        <button @click="add">发送数据</button>
        </div>
      `,
      methods:{
        add(){ 
          this.num--;
           // 自定义事件把数据传入
          // this.$emit('child-num',{cnum:this.num})
        }
      },//也可以采用钩子函数 不需要点击把数据传递给父组件
      // 在初始化页面就传值
      created(){
        this.$emit('child-num',{cnum:this.num})
      }
      };


 const ElementParent = {
        data(){
          return {
            num:0
          }
        },
        // 在模板中使用子组件自定义的事件
        template: `
        <div>
        <h3>父组件</h3>
        <p v-if="num!=0">{{num}}</p>
        <element-child @child-num="jieshou"></element-child>
        </div>
      `,
        components: {
          ElementChild,
        },
        methods:{
          // 子组件传递的数据自定义
          jieshou(data){
            this.num=data.cnum

          }
        }
      };

3.兄弟传值   (桥梁)

通过创建一个新的vue实例,其中一个组件通过 新的实例名称.$emit('xxx',this.num)  ,

 // 通过桥梁传值,创建一个新的vue实例
    const bridge=new Vue()

 const CompA={
      data(){
        return{
           num:100
        }
      },
      // 2.可以通过事件进行使用该方法
      template:`
      <div>
        <h3>A组件</h3>
        <button @click="senda">点击发送</button>
      </div>
      `,
      methods:{
        // a发送的方法
        senda(){
          bridge.$emit('xxx',this.num)
        }
      },
      // 1.通过初始化created钩子延迟函数异步传递使用方法
      // 此处必须要用异步代码延迟,因为组件a与组件b是合并关系
      created(){
       setTimeout(()=>{
          // this.senda()
       },10)
      }

    }


const CompB={
      data(){
      return {
        num:0
      }
      },
      template:`
      <div>
        <h3>B组件</h3>
        <p>{{num}}</p>
      </div>
      `,
       // b接收a通过自定义属性传递的参数
       created(){
        bridge.$on('xxx',(value)=>{
            this.num=value
        })
       }
      
    }

4.Vue原型添加数据

挂载到原型的数据可以给构造函数的实例去使用,但是添加到原型上的数据没有响应式

 //在此点击事件,num的值是不会有变化的,因为该num值是通过原型添加的
<button @click="changeNum">点击num++</button>
      <comp-header></comp-header>
      <comp-footer></comp-footer>

 Vue.prototype.num = 100;

 const CompHeader = {
        template: `
            <header>
                <h3>头部组件</h3>
                <p>{{num}}</p>
            </header>
            `,
      };
      const CompFooter = {
        template: `
            <footer>
                <h3>尾部组件</h3>
                <p>{{num}}</p>
            </footer>
            `,
      };

new Vue({
        //挂载容器
        el: "#app",
        components:{
          CompHeader,
          CompFooter
        },
        methods:{
          changeNum(){
            this.num++
            console.log(this.num);
          }
        }
      });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学杂谈之三:数学思想方法

数学杂谈之三&#xff1a;数学思想方法 数学杂谈之一&#xff1a;数学的形态 https://blog.csdn.net/cnds123/article/details/137437208 数学杂谈之二&#xff1a;数学中的概念和理解 https://blog.csdn.net/cnds123/article/details/137500537 数学思维、数学思想和数学方法…

1200/天,长期兼职贵么?

今天收到一个客户询盘&#xff0c;问公司长期招聘一个兼职程序员&#xff0c;包月的这种。问我多少钱一个月&#xff0c;在这种需求未明确的情况下&#xff0c;单纯的问价格其实意义不大的&#xff0c;只要报价不在客户心理预期范围内基本没戏的。 关于定价 关于程序员价格的定…

【进阶六】Python实现SDVRPTW常见求解算法——差分进化算法(DE)

基于python语言&#xff0c;采用经典差分进化算法&#xff08;DE&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码…

【spring】@Profile注解学习

Profile介绍 在Spring框架中&#xff0c;Profile注解用于根据特定的配置文件来有条件地激活或禁用Bean的定义。这在开发和测试过程中非常有用&#xff0c;因为它允许你为不同的环境&#xff08;如开发、测试、生产&#xff09;定义不同的配置。 Profile不仅可以标注在方法上&…

arm内核驱动-中断

先介绍个东西 ctags 这个工具可以像keil一样在工程里查找跳转&#xff0c;帮我们找到我们想要的东西。 安装教程可以找到&#xff0c;这里只讲怎么用。 在工程目录&#xff08;包含所有你会用到的头文件等&#xff09;下&#xff0c;先加载这个命令&#xff0c;可能要等待…

第十五讲:C语言内存函数

目录 1、C语言内存函数 1.1、memcpy函数的使用和模拟 1.2、memmove函数的使用和模拟 1.3、memset函数的使用 1.4、memcmp函数的使用 1、C语言内存函数 注意&#xff1a;下面这些函数的使用要包含头文件&#xff1a;string.h 1.1、memcpy函数的使用和模拟 函数声明为&am…

2024年第十七届 认证杯 网络挑战赛 (C题)| 云中的海盐 | 辐射传输方程 Stefan-Boltzmann分析 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看认证杯 网络挑战赛 (C题&#xff09;&#xff01…

PTA qls学画图

这一天qls在学校综合楼等电梯的时候看到了电梯数字的样子&#xff0c;突然觉得这样写数字特别有趣&#xff0c;于是自己想用程序跑出来。由于正常大小输出数字太小了&#xff0c;qls决定加大难度&#xff0c;他想画出不同大小的数字&#xff0c;你能帮他解决这个问题吗&#xf…

ELK,ELFK日志收集分析系统

ELK简介 ELK是一套完整的日志集中处理解决方案&#xff0c;将ElasticSearch&#xff0c;Logstash和Kibana三个开源工具配合使用&#xff0c;实现用户对日志的查询、排序、统计需求。 ELK工作原理 在所有需要收集日志的服务器上部署Logstash&#xff0c;或者先将日志进行集中…

渗透入门靶场大盘点

写给新手朋友入门&#xff0c;有了靶场丰富自己思路&#xff0c;也巩固自己的技术。当然新手老手都可以玩玩。 这期盘点渗透靶场&#xff0c;排名不分前后&#xff0c;还有其他靶场欢迎留言提出&#xff01;以及在留言当中评论出你最喜欢的靶场并附上理由。 本期是盘点入门必刷…

用html写一个雨的特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雨特效</title><link rel"stylesheet" href"./style.css"> </head> <body> <div id"wrap-textu…

19 文件接口

文件概念 文件指的是文件内容属性&#xff0c;对文件的操作无外乎就是对内容或者属性的操作 为什么平时不用文件接口 我们运行程序访问文件&#xff0c;本质是进程在访问文件&#xff0c;向硬件写入内容&#xff0c;只有操作系统有这个权限。普通用户想写入内容呢&#xff1…

SpringBoot学习笔记四

SpringBoot学习笔记四-监听机制 1. SpringBoot监听器1.1 无需配置1.1.1 CommandLineRunner使用1.1.2 ApplicationRunner的使用1.1.3 CommandLineRunner与ApplicationRunner的区别 1.2 需要创建META-INF文件&#xff0c;并在其中创建spring.factories&#xff0c;配置相关的信息…

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互&#xff0c;从而实现了Web请求的接收&#xff0c;处理和响应。 它的组件有如下几个&#xff1a; DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

make/makefile学习

文章目录 1、makefile函数1.1、字符串替换函数&#xff1a;subst1.2、模式字符串替换函数&#xff1a;patsubst1.3、去空格函数&#xff1a;strip1.4、查找字符串函数&#xff1a;findstring 2、、:、&#xff1f;区别 1、makefile函数 1.1、字符串替换函数&#xff1a;subst …

2000-2022年县域常住人口和户籍人口数据

2000-2022年县域常住人口和户籍人口数据/县常住人口及县户籍人口数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;县域统计年鉴、各省年鉴 3、指标&#xff1a;户籍人口数、常住人口数 4、范围&#xff1a;县区级&#xff0c;具体县名单参看数据预览 5、缺失情况…

文心一言 VS 讯飞星火 VS chatgpt (233)-- 算法导论17.2 1题

一、假定对一个规模永远不会超过 k 的栈执行一个栈操作序列。执行 k 个操作后&#xff0c;我们复制整个栈来进行备份。通过为不同的栈操作赋予适合的摊还代价&#xff0c;证明&#xff1a; n 个操作(包括复制栈)的代价为 O(n) 。 文心一言&#xff1a; 为了证明对一个规模永远…

直播带货行业将迎来大地震

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 为什么这么多人喊着关闭直播带货?实体经济是到底因为什么萧条的?为什么大街上冷冷清清的?是房租、虚高的价格、还是直播带货引起的? 在4月9日的国务院政策吹风会上&#xff0c;市场监管明确指出&#xff1a; …

MINI2440 开发板 给他干出来了

环境是ubuntu14.04。不要问我为什么是这个版本&#xff0c;因为之前的ubuntu12.04 环境干不出来&#xff0c;你去试试就知道了&#xff01;各种资源包下载不下来。 输入启动参数&#xff1a; 进入MINI2440&#xff1a;别说心里一万个开心&#xff0c;启动完成&#xff0c;输入p…

关于HTTP1.0、1.1、1.x、2.0、3.0与HTTPS之间的理解

关于HTTP1.0、1.1、1.x、2.0、3.0与HTTPS之间的理解 HTTP的由来 HTTP是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写。它的发展是万维网协会&#xff08;World Wide Web Consortium&#xff09;和Internet工作小组IETF&#xff08;Internet Eng…