Vue.extend()和我的两米大砍刀

Vue.extends是什么?

一个全局API,用于注册并挂载组件。
传统的引用组件的方式是使用import直接引入,但是使用Vue.extends()也可以实现。

使用规则

<div id="mount-point"></div>
// 创建构造器
var Profile = Vue.extend({
  template: '<p>{{firstName}} {{lastName}} aka {{alias}}</p>',
  data: function () {
    return {
      firstName: 'Walter',
      lastName: 'White',
      alias: 'Heisenberg'
    }
  }
})
// 创建 Profile 实例,并挂载到一个元素上。
new Profile().$mount('#mount-point')
//你可以挂载到任何你想挂载的地方
//new Profile().$mount("#app")

注意:应用场景

这种操作类似于直接用js操作dom元素,belike

//创建
const dom = document.createElemnet('div')
dom.innerHtml = '你好'
//挂载
const container = document.getElementById('#mount-point')
container.appendChild(container)

通过这样的类比,我们很容易就明白为什么不推荐使用这种方式去引入使用一个模块组件,因为vue是有自己的虚拟DOM机制和组件挂载过程的,所以不推荐直接操作DOM。建议还是通过触发数据的变化,引发视图变化,即MVVM机制。
非必要请不要使用这种方式去声明使用组件,因为它会使代码变得不好读,且容易造成误解。那么我们在什么情景下去使用这个api呢?

  • vue.extend主要用于动态创建组件的场景,比如弹窗组件、提示框组件等。(官网这么说,但我依然建议不要这么做。)
  • 组件模板都是事先定义好的,我要从接口动态渲染组件。

1.举个我在项目中使用的实际场景:弹窗组件、提示框组件

function createModal(options) {
  const Modal = Vue.extend({
    data() {
      return {
        title: options.title,
        content: options.content
      };
    },
    template: `
      <div class="modal">
        <h2>{{ title }}</h2>
        {{ content }}
      </div>
    `
  });

  const modal = new Modal();
  modal.mount();
  document.body.appendChild(modal.el);
}

// 调用createModal方法创建一个弹窗
createModal({
  title: '提示',
  content: '这是一个弹窗示例'
});

2.一些操蛋的思路:当时在做这个对话的时候我只想着在发生对话的时候创建一个dom,而非使用视图触发,后面涉及了一些复杂交互头痛。写在这里用于加深学习吧……
对话场景

//DialogueItem.vue

<template>
    你好
    <div @click='stopCurrentAsk'>停止</div>
</template>
<script>
import Vue from 'vue'
export default {
    name: "DialogueItem ",
    props: ['type', 'content', 'id'],
    data() {
        return {
            loading: false,
        };
    },
    methods: {
        changeLoadingStatus(loading) {
            this.loading = loading
        },
        stopCurrentAsk(id) {
            this.$emit('stopAsk');
        },
    }
};
</script>
import DialogueItem from '@/components/DialogueItem'

 public instand = null
 
 this.instand = new (Vue.extend(DialogueItem))
        ({
          propsData: { type, id, content },
        })
 this.instand.$mount()
 //1.子组件触发父组件事件。
 //上文也提到,这就是个封装成组件的dom,所以,想要通过子组件DialogueItem触发父组件的内容,就直接监听事件就行了
 this.instand.$on("stopAsk", () => {});
 
 //2.父组件触发子组件
 this.instand.changeLoadingStatus(false)
 
 dom.appendChild(this.instand.$el)

说实话,真的难用,大抵是我场景不对。但是用都用了记录一下。

关于我的两米大砍刀

我在项目开发中发现同样的引用和参数,却无法产生同样的结果,最后定位发现是两个组件不同的构建方式导致的。这个罪魁祸首就是Vue.extend(),换一种组件引入方式就解决了。
至于为什么,搜索了半天没有明白是什么原因,有的说是vuex没有被正确注入到根实例中。
懒得看了,反正子组件无法使用vuex,也无法使用,谁知道可以来踩踩……
少用,谢谢!

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

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

相关文章

PyCharm,终端conda环境无法切换的问题(二个解决方案)

问题 PyCharm终端&#xff0c;环境切换无效&#xff0c;默认始终为base 解决一 Settings->Tools->Terminal->ShellPath&#xff0c;将powershell修改为cmd.exe 解决二 conda config --show在输出中找到 auto_activate_base 的行&#xff0c;发现被设置为 true&#x…

R语言中的execl数据转plink

文章目录 带出外部连接的方式添加列的方式从列表中选出对应的数据信息查看变量信息没有成功 带出外部连接的方式 点击这个黄色的按钮就可以弹出外部链接的方式 添加列的方式 创建一个数据框的方式 我们创建一个三行三列的数据方式 df <- data.frame(name c("Alice&…

嵌入式linux中利用QT控制蜂鸣器方法

大家好,今天给大家分享一下,如何控制开发板上的蜂鸣器。 第一:开发板原理图 从原理图中可以得出,当引脚输出低电平的时候,对应的蜂鸣器发出响声。 第二:QT代码详细实现 设置一个按钮,点击即可控制BEEP状态发生反转。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#in…

【网络编程】TCP流套接字编程(TCP实现回显服务器)

一.TCP流套字节相关API. Socket(既能给客户端使用,也能给服务器使用) 构造方法 基本方法: ServerSocket(只能给服务器使用) 构造方法: 基本方法: 二.TCP实现回显服务器. 客户端代码示例: package Demo2;import java.io.IOException; import java.io.InputStream; import j…

【飞桨AI实战】人体姿态估计:零基础入门,从模型训练到应用开发

前言 本次分享将带领大家从 0 到 1 完成一个人体姿态估计任务&#xff0c;覆盖数据准备、模型训练、推理部署和应用开发的全流程&#xff0c;项目将采用以PaddlePaddle为核心的飞桨深度学习框架进行开发&#xff0c;并总结开发过程中踩过的一些坑&#xff0c;希望能为有类似项…

(C语言)sscanf 与 sprintf详解

目录 1.sprintf函数详解 2. sscanf函数详解 1.sprintf函数详解 头文件&#xff1a;stdio.h 作用&#xff1a;将格式化的数据写入字符串里&#xff0c;也就是将格式化的数据转变为字符串。 演示&#xff1a; #include <stdio.h> struct S {char name[10];int height;…

【Gradle如何安装配置及使用的教程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【笔记】应对Chrome更新导致Chromedriver失效的解决方案:Chrome For Test

随着网络应用和网站的不断发展&#xff0c;自动化测试变得越来越重要&#xff0c;而Selenium成为了许多开发者和测试人员的首选工具之一。然而&#xff0c;对于使用Selenium来进行网站测试的人来说&#xff0c;Chrome浏览器的频繁更新可能会成为一个头疼的问题。每当Chrome更新…

有的爆炸,有的爆冷!盘点那些爆冷的985院校

今年计算机普遍很炸&#xff0c;专硕学硕分都很高。大热门&#xff0b;非常多跨考。 不管是自命题还是408&#xff0c;大家考完都说难&#xff0c;但是一出分&#xff0c;个个350&#xff0c;非常卷。 报中下211&#xff0c;专硕分数要要330才稳一点&#xff0c;中上211则直逼3…

MySQL数据库外键约束打开与关闭 ️

MySQL数据库外键约束打开与关闭 &#x1f6e0;️ MySQL数据库外键约束打开与关闭 &#x1f6e0;️摘要 &#x1f4dd;引言 &#x1f680;正文内容&#xff08;详细介绍&#xff09; &#x1f4a1;关闭外键约束检查外键约束检查关闭的作用风险与最佳实践建议 &#x1f914; QA环…

Java数据结构-堆和优先级队列

目录 1. 相关概念2. PriorityQueue的实现2.0 搭建整体框架2.1 堆的创建和调整2.2 插入元素2.3 出堆顶元素 3. 全部代码&#xff08;包含大根堆和小根堆&#xff09;4. PriorityQueue的使用5. Top-K问题 之前我们学习的二叉树的存储方式是链式存储&#xff0c;&#xff08;不清楚…

idm线程越多越好吗 idm线程数多少合适

IDM&#xff08;Internet Download Manager&#xff09;是一款流行的下载管理软件&#xff0c;它支持多线程下载&#xff0c;这意味着它可以同时建立多个连接来下载文件的不同部分&#xff0c;从而提高下载速度。我们在使用IDM的时候总是有很多疑问&#xff0c;今天我们学习IDM…

LeetCode刷题实战5:最长回文子串

题目内容 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba"…

【刷题】 二分查找进阶

送给大家一句话&#xff1a; 你向神求助是因为相信神&#xff0c;神没有回应你是因为神相信你 ε≡٩(๑>₃<)۶ &#xfeff;ε≡٩(๑>₃<)۶ &#xfeff;ε≡٩(๑>₃<)۶ 一心向学 二分查找进阶 1 前言Leetcode 852. 山脉数组的峰顶索引题目描述算法思…

【C++提高】常用容器

常用容器 引言&#xff1a;迭代器的使用一、vector容器1. vector基本概念2. vector的迭代器3. vector构造函数4. vector赋值操作5. vector容量和大小6. vector插入和删除7. vector数据存取8. vector互换容器9. vector预留空间 二、deque容器1. deque容器的基本概念2. deque容器…

终端的颜值担当-WindTerm

一、序言 今天就不给各位大佬聊技术了&#xff0c;给大佬们分享一款高颜值的终端工具——WindTerm。 二、什么是 WindTerm WindTerm&#xff08;也称为 Wind Term&#xff09;是一款终端仿真器&#xff0c;可用于在 Windows/MacOS/Linux 操作系统上模拟类 Unix 环境的命令行…

Python爬虫使用需要注意什么?应用前景如何?

Python爬虫很多人都听说过&#xff0c;它是一种用于从网页上获取信息的程序&#xff0c;它可以自动浏览网页、提取数据并进行处理。技术在使用Python爬虫时需要注意一些重要的事项&#xff0c;同时本文也会跟大家介绍一下爬虫的应用前景。 第一个注意事项就是使用Python爬虫时…

基于注解配置bean

文章目录 1.基本使用1.基本介绍2.快速入门1.引入jar包2.MyComponent.java3.UserAction.java3.UserDao.java4.UserService.java5.beans05.xml6.断点查看bean对象是否创建7.测试 3.注意事项和细节 2.自己实现spring注解1.需求分析2.思路分析图3.编写自定义注解ComponentScan4.编写…

今日arXiv最热NLP大模型论文:面向不确定性感知的Language Agent

引言&#xff1a;面向不确定性的感知的Language Agent Language Agent利用大型语言模型&#xff08;如OpenAI发布的GPT系列、Meta的LLaMA2等&#xff09;来与外部世界互动&#xff0c;例如通过工具和API收集观察结果&#xff0c;并处理这些信息以解决任务。这些Language Agent…

javaWeb项目-智能仓储系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JSP技术 JSP(Jav…