【前端面试3+1】18 vue2和vue3父传子通信的差别、props传递的数据在子组件是否可以修改、如何往window上添加自定义属性、【多数元素】

一、vue2和vue3父传子通信的差别

1、Vue2

父组件向子组件传递数据通常通过props属性来实现。父组件可以在子组件的标签中使用v-bind指令将数据传递给子组件的props属性。在子组件中,可以通过props属性来接收这些数据。这种方式是一种单向数据流的方式,父组件传递数据给子组件,子组件接收并渲染这些数据。

vue2中使用props属性传递数据示例:

<!-- ParentComponent.vue -->
<template>
  <ChildComponent :message="parentMessage" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  data() {
    return {
      parentMessage: 'Hello from parent'
    };
  },
  components: {
    ChildComponent
  }
};
</script>
<!-- ChildComponent.vue -->
<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  props: ['message']
};
</script>

2、Vue3

        Vue3除了仍然可以使用props来进行父子组件通信外,Vue 3引入了一个新的API,即attrsemit。通过attrs,父组件可以向子组件传递属性,而子组件可以通过emit向父组件发送事件。这种方式使得父子组件之间的通信更加灵活,子组件可以通过emit触发事件,父组件可以监听这些事件并做出相应的响应。

        还引入了v-model指令的改进,使得父组件可以通过v-model指令双向绑定数据到子组件。这样父组件可以直接修改子组件中的数据,而不需要通过事件和属性来进行通信。

在Vue 3中,可以使用attrs属性传递数据的示例代码如下:

<!-- ParentComponent.vue -->
<template>
  <ChildComponent v-bind="attrs" @child-event="handleChildEvent" />
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  data() {
    return {
      attrs: {
        message: 'Hello from parent'
      }
    };
  },
  components: {
    ChildComponent
  },
  methods: {
    handleChildEvent(data) {
      console.log('Received data from child:', data);
    }
  }
};
</script>
<!-- ChildComponent.vue -->
<template>
  <button @click="emitEvent">Click me</button>
</template>

<script>
export default {
  methods: {
    emitEvent() {
      this.$emit('child-event', 'Data from child');
    }
  }
};
</script>

父组件通过attrs属性向子组件传递message属性,子组件通过$emit方法触发child-event事件,并将数据传递给父组件。父组件可以监听child-event事件并处理子组件传递的数据

二、props传递的数据在子组件是否可以修改?

不能! 

在Vue中,props 是单向数据流的,意味着父组件传递给子组件的 props 数据在子组件中是只读的,子组件不能直接修改 props 数据。

!!!然而,如果子组件需要修改传递下来的数据,可以通过以下方式实现

        子组件就间接地修改父组件传递下来的数据

        1、在子组件内部使用 data 属性:子组件可以将 props 数据作为初始值,然后在子组件内部将其赋值给 data 属性中的变量,从而可以在子组件内部修改这些数据。

<template>
  <div>
    <p>{{ modifiedMessage }}</p>
    <button @click="modifyMessage">Modify Message</button>
  </div>
</template>

<script>
export default {
  props: ['message'],
  data() {
    return {
      modifiedMessage: this.message
    };
  },
  methods: {
    modifyMessage() {
      this.modifiedMessage = 'Modified message';
    }
  }
};
</script>
  1. 2、通过触发事件向父组件传递修改后的数据:子组件可以通过 $emit 方法触发一个自定义事件,并将修改后的数据传递给父组件,由父组件来更新数据。
<template>
  <div>
    <p>{{ message }}</p>
    <button @click="modifyMessage">Modify Message</button>
  </div>
</template>

<script>
export default {
  props: ['message'],
  methods: {
    modifyMessage() {
      this.$emit('update:message', 'Modified message');
    }
  }
};
</script>

父组件可以监听子组件触发的事件,并在事件处理程序中更新数据。

<template>
  <div>
    <ChildComponent :message="parentMessage" @update:message="updateMessage" />
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  data() {
    return {
      parentMessage: 'Hello from parent'
    };
  },
  components: {
    ChildComponent
  },
  methods: {
    updateMessage(newMessage) {
      this.parentMessage = newMessage;
    }
  }
};
</script>

三、如何往window上添加自定义属性? 

在Vue应用中,如果需要向window对象添加自定义属性,

方法一、

可以在Vue实例的生命周期钩子函数中进行操作。

以下是一种常见的方法:

// main.js (或者入口文件)
import Vue from 'vue';
import App from './App.vue';

Vue.config.productionTip = false;

new Vue({
  render: h => h(App),
  created() {
    // 在Vue实例创建时,向window对象添加自定义属性
    window.customProperty = 'Custom Value';
  }
}).$mount('#app');

方法二、

使用Vue插件来实现向window添加自定义属性。

// customPlugin.js
const CustomPlugin = {
  install(Vue) {
    Vue.prototype.$customProperty = 'Custom Value';
    window.customProperty = 'Custom Value';
  }
};

export default CustomPlugin;

定义了一个名为CustomPlugin的插件,通过install方法在Vue实例上添加了一个原型属性$customProperty,同时也向window对象添加了自定义属性customProperty

然后,在Vue应用的入口文件中使用这个插件:

// main.js (或者入口文件)
import Vue from 'vue';
import App from './App.vue';
import CustomPlugin from './customPlugin';

Vue.config.productionTip = false;

Vue.use(CustomPlugin);

new Vue({
  render: h => h(App)
}).$mount('#app');

        通过这种方式,我们可以在整个Vue应用中通过this.$customProperty访问插件定义的属性,并且也可以通过window.customProperty在全局范围内访问这个属性。

四、算法【多数元素】 

1.题目

        给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

        你可以假设数组是非空的,并且给定的数组总是存在多数元素。

int majorityElement(int* nums, int numsSize) {
}

2.解题

        基本思想是在数组中进行投票,将第一个元素作为候选者,然后对数组中的每个元素进行遍历,如果计数为0,则将当前元素设为候选者,如果和候选者相同则计数加1,否则计数减1。最终选出的候选者就是多数元素。

int majorityElement(int* nums, int numsSize) {
    int count = 0;
    int candidate = 0;

    for (int i = 0; i < numsSize; i++) {
        if (count == 0) {
            candidate = nums[i];
        }
        if (nums[i] == candidate) {
            count++;
        } else {
            count--;
        }
    }
 
    return candidate; // if no majority element exists
}

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

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

相关文章

Astar路径规划算法复现-python实现

# -*- coding: utf-8 -*- """ Created on Fri May 24 09:04:23 2024"""import os import sys import math import heapq import matplotlib.pyplot as plt import time 传统A*算法 class Astar:AStar set the cost heuristics as the priorityA…

【C++】 使用CRT 库检测内存泄漏

CRT 库检测内存泄漏 一、CRT 库简介二、CRT 库的使用1、启用内存泄漏检测2、设置应用退出时显示内存泄漏报告3、丰富内存泄漏报告4、演示使用 内存泄漏是 C/C 应用程序中最微妙、最难以发现的 bug&#xff0c;存泄漏是由于之前分配的内存未能正确解除分配而导致的。 最开始的少…

面试(02)————Java集合篇

目录 一、为什么数组索引是从0开始&#xff1f;如果从1开始不行吗&#xff1f; 二、ArrayList底层的实现原理是什么&#xff1f; ​编辑三、ArrayList list new ArrayList(10)中的list扩容几次&#xff1f; 四、如何实现数组与List之间的转换&#xff1f; 五、ArrayList…

计算机图形学入门07:光栅化中的采样与走样

1.什么是光栅化&#xff1f; 在前面的章节里提过&#xff0c;光栅化(Rasterization)就是将物体投影在屏幕上的图形&#xff0c;依据像素打散&#xff0c;每一个像素中填充不同的颜色。 如下图中的老虎&#xff0c;可以看到屏幕上有各种多边形&#xff0c;这些多边形经过各种变换…

线性回归模型详解

一、引言 在机器学习中&#xff0c;线性回归模型是最基础也是最重要的预测模型之一&#xff0c;它是监督学习的一个简单但强大的工具&#xff0c;用于预测输出变量&#xff08;Y&#xff09;与一个或多个输入变量&#xff08;X&#xff09;之间的关系。线性回归模型以其容易理…

动态IP与静态IP的优缺点

在网络连接中&#xff0c;使用动态和静态 IP 地址取决于连接的性质和要求。静态 IP 地址通常更适合企业相关服务&#xff0c;而动态 IP 地址更适合家庭网络。让我们来看看动态 IP 与静态 IP 的优缺点。 1.静态IP的优点&#xff1a; 更好的 DNS 支持&#xff1a;静态 IP 地址在…

【因果推断python】19_局部平均效应2

目录 局部平均干预效果&#xff1a;后期 对参与度的影响 关键思想 局部平均干预效果&#xff1a;后期 局部平均处理效应明确了我们可以估计因果效应的人群。这也是查看 IV 的另一种方式&#xff0c;它提供了我们可以使用的其他很酷的直觉。在现代 IV 中&#xff0c;我们将工…

气膜乒乓球馆:新型体育设施的投资机遇—轻空间

乒乓球作为我国的国球&#xff0c;不仅在世界舞台上表现卓越&#xff0c;在国民的心目中也占有重要位置。随着科技的进步&#xff0c;气膜乒乓球馆作为一种新型体育设施&#xff0c;正逐渐走入大众视野&#xff0c;为乒乓球爱好者提供了一个舒适、安全、环保的运动场所。那么&a…

加强校园气膜体育馆建设的必要性—轻空间

在现代教育中&#xff0c;体育运动作为学生全面发展的重要组成部分&#xff0c;受到越来越多的重视。为了满足学生的运动需求&#xff0c;提供更好的运动场所&#xff0c;加强气膜体育馆在校园中的建设变得尤为重要。气膜体育馆作为一种新型体育设施&#xff0c;凭借其独特的优…

打造精细化运维新玩法(一)

一、SLO介绍——为什么需要SLO 二、SLO健康度——从0到1构建SLO 三、AIOps赋能——SLO和智能化结合 四、案例介绍——实践场景和运营探索 五、总结 精细化运维是运维演进的必由之路&#xff0c;是综合业务需求、研发效能、稳定性保障、成本优化、架构治理等多种因素驱动的必…

纷享销客集成平台(iPaaS)的应用与实践

案例一 企业系统集成的产品级解决方案 概况 随着国家出台一系列鼓励LED照明产业发展与创新的规划和政策&#xff0c;以及国际市场全球演唱会、音乐会的活跃以及线上零售、商业地产等行业回暖&#xff0c;LED显示行业发展形势积极向好。深圳市艾比森光电股份有限公司&#xff…

【Java】static 类方法中注意事项

static 类方法中注意事项 目录 代码示例&#xff1a; package suziguang_d4_staticNote;public class Student {public int score 66;public static String name "zhangsan";// 1.类方法中可以直接访问类的成员&#xff0c;不可以直接访问实例成员public static v…

Virustotal查询恶意进程

1、使用netstat查看可疑进程 执行ls -al /proc/$PID/exe确认可疑进程对应的文件&#xff1b;若文件未被删除&#xff0c;则直接上传文件到Virustotal进行检测&#xff0c;或者计算出文件对应的md5&#xff0c;使用md5去Virustotal进行查询&#xff1b;若文件已被删除&#xff0…

MacOS M系列芯片一键配置多个不同版本的JDK

第一步&#xff1a;下载JDK。 官网下载地址&#xff1a;Java Archive | Oracle 选择自己想要下载的版本&#xff0c;一般来说下载一个jdk8和一个jdk11就够用了。 M系列芯片选择这两个&#xff0c;第一个是压缩包&#xff0c;第二个是dmg可以安装的。 第二步&#xff1a;编辑…

十年数据分析经验分享

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

企业研发数据泄露损失严重,研发数据保护到底怎么才能有效落地?

数据已成为企业毋庸置疑的核心资产&#xff0c;而企业众多数据中&#xff0c;研发数据则占据着重要的角色&#xff0c;近年来&#xff0c;发生了多起企业研发数据被窃取或泄露的事件&#xff0c;给企业带来严重的名誉、经济损失&#xff1a; 小米公司&#xff1a;2023年1月&am…

java学习笔记(持续更新中...)

Java 中的基本数据类型主要包括以下7种&#xff1a; byte&#xff1a;字节型&#xff0c;占用 1 字节&#xff0c;范围-128 到 127。char&#xff1a;字符型&#xff0c;占用 2 字节&#xff0c;范围 0 到 65535。short&#xff1a;短整型&#xff0c;占用 2 字节&#xff0c;…

针对多智能体协作框架的元编程——METAGPT

M ETA GPT: M ETA P ROGRAMMING FOR M ULTI -A GENT COLLABORATIVE F RAMEWORK 1.概述 现有的多智能体系统主要面临以下问题&#xff1a; 复杂性处理不足&#xff1a;传统的多智能体系统主要关注简单任务&#xff0c;对于复杂任务的处理能力有限&#xff0c;缺乏深入探索和…

Dvws靶场

文章目录 一、XXE外部实体注入二、No-SQL注入三、Insecure Direct Object Reference四、Mass Assignment五、Information Disclosure六、Command Injection七、SQL注入 一、XXE外部实体注入 访问http://192.168.92.6/dvwsuserservice?wsdl&#xff0c;发现一个SOAP服务。在SO…

vite项目启动后用局域网不能访问

今天来解决一个问题&#xff1a;基于Vite构建的Vue项目在启动后只能通过localhost这种形式访问 如果把localhost换成本主机的局域网ip地址之后页面无法访问了。 就连用127.0.0.1都无法访问。尝试多次之后&#xff0c;最后证明只有使用localhost这种形式才可以 原因&#xff1…