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

一.什么是生命周期?

在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);
          }
        }
      });

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是CSGO搬砖即游戏搬砖注意事项?

CSGO市场是指《反恐精英&#xff1a;全球攻势》游戏内的物品交易市场。玩家可以在这个市场上买卖各类虚拟物品&#xff0c;包括武器皮肤、刀具、手套等。CSGO市场的价格是由供需关系、稀有度、流行度等多个因素影响的。 一般来说&#xff0c;稀有度较高或者比较受欢迎的物品价…

科研学习|可视化——相关性结果的可视化

一、相关性分析介绍 相关性分析是指研究两种或者两种以上的变量之间相关关系的统计分析方法&#xff0c;一般分析步骤为&#xff1a; 1&#xff09;判断变量间是否存在关联&#xff1b;2&#xff09;分析关联关系&#xff08;线性/非线性&#xff09;、关联方向&#xff08;正相…

向南而行 攀“高”逐“新 ” ,南山举行深港校企成果对接交流活动

春风花草香&#xff0c;湾区气象新。 4月10日&#xff0c;“向南而行”深港校企成果对接交流活动在深圳人才公园求贤阁举行。南山与香港一家亲&#xff0c;“双向奔赴”拓展合作新空间。 今年是《粤港澳大湾区发展规划纲要》发布5周年。5年来&#xff0c;南山与香港从“硬联通…

大话设计模式——19.责任链模式(Chain of Responsibility Pattern)

简介 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 主要有两个核心行为&#xff1a;1.处理请求&#xff1b;2.将请求传递到下一节点 U…

vue简单使用四(计算属性、过滤器、侦听器和生命周期)

目录 计算属性&#xff1a; 侦听器&#xff1a; 过滤器&#xff1a; 生命周期 &#xff1a; 计算属性&#xff1a; 查看arrs这个数组的长度&#xff1a; 输出结果&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><me…

Windows终端添加git bash

环境&#xff1a;windows11 终端&#xff1a;windows terminal git bash默认的界面不太好看&#xff0c;添加到终端会比较好用 步骤 打开 windows terminal&#xff0c;在向下箭头 点击 设置左侧栏 点击 “添加新配置文件”&#xff0c;如下图配置&#xff0c;主要修改项&…

2024年Flink CDC 实时同步数据(MySQL到MySQL)

#准备工作# 看到一下图片说明执行成功&#xff01;&#xff01;&#xff01; 异常处理及分析&#xff1a; Could not execute SQL statement. Reason: org.apache.flink.sql.parser.impl.ParseException: Encountered "\connector\" at line 21, column 3. Was expec…

PostgreSQL强势崛起,选择它还是MySQL

大家好&#xff0c;关系型数据库&#xff08;RDBMS&#xff09;作为数据管理的基石&#xff0c;自数据仓库兴起之初便扮演着核心角色&#xff0c;并在数据科学的发展浪潮中持续发挥着价值。即便在人工智能和大型语言模型&#xff08;LLM&#xff09;日益成熟的今天&#xff0c;…

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: &#xff08;电源&#xff09;插座&#xff08;电器上的&#xff09;插口&#xff0c;插孔&#xff0c;管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…

医疗器械UDI码的DI和PI什么意思

一、理解医疗器械UDI 医疗器械的UDI码是Unique Device Identifier Code的缩写&#xff0c;意为唯一设备识别码。 医疗器械的UDI码是唯一设备识别码&#xff0c;由两个部分组成&#xff1a;DI和PI。 1.1、DI 理解 DI&#xff08;Device Identifier&#xff0c;设备标识符&am…

19、矩阵-螺旋矩阵

思路: 这道题主要是对空间上有所思考&#xff0c;每次转一圈上右下左各减少一层。不妨设top&#xff0c;right&#xff0c;down&#xff0c;left&#xff0c;每次旋转一圈 top&#xff0c;right--&#xff0c;down--&#xff0c;left 代码如下&#xff1a; class Solution …

【炒股Zero To Hero】MACD金叉死叉到底是否有效,加上这个指标回报率增加197倍

移动平均收敛散度&#xff08;MACD - Moving Average Convergence Divergence&#xff09;是一种趋势跟踪动量指标&#xff0c;显示了证券价格的两个移动平均之间的关系。它用于识别趋势的方向和强度&#xff0c;属于技术分析中振荡器的一类。 MACD如何衡量股票及其趋势 有两…

蜘蛛池规矩采集优化与运用技巧 什么是蜘蛛池/SEO蜘蛛池怎么养?

作为一名网络内容修改&#xff0c;我常常需求从各种网站上收集文章并转载到咱们的网站上。而在这个过程中&#xff0c;我深深感受到了蜘蛛池对我的帮助。今日&#xff0c;我就来共享一下我对蜘蛛池收集规矩的亲自感受。 本文 虚良SEO 原创&#xff0c;转载保留链接&#xff01…

【电子通识】热风枪的结构与使用方法

热风枪的结构 热风枪是专门用来拆焊、焊接贴片元器件和贴片集成电路的焊接工具&#xff0c;它主要由主机和热风焊枪两大部分构成。 热风枪主要有电源开关、风速设置、温度设置、热风连接等部件组成。根据不同品牌和价位的热风枪&#xff0c;有一些功能齐全的也集成了烙铁功能。…

绿联 安装火狐浏览器(Firefox),支持访问路由器

绿联 安装火狐浏览器&#xff08;Firefox&#xff09;&#xff0c;支持访问路由器 1、镜像 linuxserver/firefox:latest 前置条件&#xff1a;动态公网IP。 已知问题&#xff1a; 直接输入中文时&#xff0c;不能完整输入&#xff0c;也可能输入法无法切换到中文&#xff0c;可…

Post表单提交后端接不到参数

项目背景&#xff1a; 框架&#xff1a;Springboot 版本&#xff1a;1.5.6.REAEASE 问题描述 Postman通过表单提交请求时后端接不到值 原因分析&#xff1a; 启动项中注入其他Bean时取名叫dispatcherServlet&#xff0c;当发现http接口无法访问时&#xff0c;原开发人员又…

albef论文学习

首先要知道vit是啥东西。vit就是transformer模型在图像领域的运用。 transformer模型原本是用于自然语言的&#xff0c;encoder和decoder接受的都是文字。vit把图像分割成很多个小块&#xff0c;把各个小块拉长当成向量来用&#xff0c;接下来就是一样的。最后接一个全连接层做…

(学习日记)2024.04.12:UCOSIII第四十节:软件定时器函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

编程技巧(五) mysql中查询将行转为列逗号隔开拼接

让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…

CSS导读 (元素显示模式)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 三、CSS的元素显示模式 3.1 什么是元素显示模式 3.2 块元素 3.3 行内元素 3.4 行内块元素 3.5 元素…