vue3 ,naive-ui,嵌套modal踩坑

这篇具有很好参考价值的文章主要介绍了vue3 ,naive-ui,嵌套modal踩坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天写代码,组合使用了,n-modal,n-datatable和n-select,在n-select组件出问题,无法展开,并且报错

Failed to execute 'insertBefore' on 'Node': This node type does not support this method.
Unhandled error during execution of scheduler flush. This is likely a Vue internals bug. Please open an issue at
Cannot read properties of null (reading 'emitsOptions')

先展示错误的demo代码

<script setup lang="ts">
import {  ref } from 'vue'
import {  NButton, NModal } from 'naive-ui'
import ModuleView from './ModuleView.vue';
const showModal_1 = ref(false)

</script>
<template>
  <div>
    <n-button type="info" @click="showModal_1 = true">点击展开modal</n-button>
    <n-modal v-model:show="showModal_1">
      <ModuleView/>
    </n-modal>
  </div>
</template>

ModuleView是抽象出来的组件,问题就出在这个抽象里面,下面是子组件代码;

<script setup lang="ts">
import { h, reactive, ref } from 'vue'
import { NSelect, NDataTable, NButton, NModal, NCard } from 'naive-ui'
const optionsRef = ref([
  {
    label: '1',
    value: 1
  },
  {
    label: '2',
    value: 2
  }
])

const columns = reactive([
  {
    title: '序号',
    key: 'index'
  },
  {
    title: '组件A',
    key: 'comp_a',
    render: () =>
      h(
        NSelect,
        {
          options: optionsRef.value,
          style: { width: '200px' }
        },
        {}
      )
  },
  {
    title: '组件B',
    key: 'comp_b',
    render: () =>
      h(NSelect, {
        options: optionsRef.value,
        style: { width: '200px' }
      })
  }
])
const data = ref<any>([])
const handelAdd = () => {
  const item: any = {
    index: data.value.length + 1,
    comp_a: 1,
    comp_b: 2
  }
  data.value.push(item)
}
const showModal_2 = ref(false)
</script>

<template>
  <div>
    <n-card>
      <n-button @click="handelAdd">+</n-button>
      <n-data-table :columns="columns" :data="data"> </n-data-table>
    </n-card>
  </div>

  <n-modal v-model:show="showModal_2"> </n-modal>
</template>

<style scoped></style>

很明显这是一个嵌套modal的代码。
效果图:
slot[default] should have exactly one child.,ui,vue.js,javascript

大伙都知道,vue2的时候template里面第一层只能写一个组件:

<template>
	<div>
		<div>你好</div>
		<a>hello world<a/>
	</div>
</template>

但是到了vue3就支持多组件了,比如:

<template>
	<div>你好</div>
	<a>hello world<a/>
</template>

我写vue3保留了vue2的习惯,只写一个组件,唯独用modal的时候习惯写到主组件外面,因为这个组件是遮罩的,会覆盖全页面。
但是问题也出在这,如果直接在modal里面写两个组件,naive会直接报错。

  <div>
    <n-button type="info" @click="showModal_1 = true">点击展开modal</n-button>
    <n-modal v-model:show="showModal_1">
      <n-button @click="">+</n-button>
      <n-data-table> </n-data-table>
      <n-modal> </n-modal>
    </n-modal>
  </div>
App.vue:11 [naive/getFirstSlotVNode]: slot[default] should have exactly one child
App.vue:11 [naive/modal]: default slot is empty 这个是错误报错

意思是说,modal里面只能有一个子组件。

    <n-modal v-model:show="showModal_1">
      <ModuleView/>
    </n-modal>

但是如果像我这样,抽象出来,就不会报错,会影响子组件内部的调用,导致我一直以为是Select或者DataTable写错了。
解决办法也很简单,直接把子组件写成一整个div就好。文章来源地址https://www.toymoban.com/news/detail-846104.html

到了这里,关于vue3 ,naive-ui,嵌套modal踩坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • naive-ui在setup引用message的方法

    序:         先说好,能用,而且不用新建啥目录,但是官方不推荐!!!!,但是快!!!      上图的的api文档地址点右边===》Naive UI 原文是=》如果你想在  setup  外使用   useDialog 、 useMessage 、 useNotification 、 useLoadingBar ,可以通过  createDiscreteApi  来构建对应的 API。

    2024年02月03日
    浏览(36)
  • 使用@zip.js/zip.js与naive-ui的Tree组件实现在线文件解压预览

    用于压缩和解压缩文件的 JavaScript 库 支持Zip64 格式 支持WinZIP AES和 PKWare ZipCrypto 加密 支持同时读取和写入一个或多个 zip 文件 集成工作池管理器 无第三方依赖 该库依赖于Promise、TypedArray、 Streams API 以及以下可选的 API: Web Workers Compression Streams Web Crypto 该库与最新版本的

    2024年02月19日
    浏览(48)
  • Vue3 UI组件库对比,Naive UI、Element Plus、 Ant Design Vue

    Element Plus Naive ui Ant Design Vue 简介 element-ui Vue3版本,国内使用广泛 Vue作者推荐的Vue3ui 组件库 阿里Ant Design设计规范的Vue实现版 地址 https://github.com/element-plus/element-plus https://github.com/tusen-ai/naive-ui https://github.com/vueComponent/ant-design-vue 社区活跃度 高 中 高 ui库组件主要实现方式

    2024年01月25日
    浏览(43)
  • Vue3+Vite+Pinia+Naive后台管理系统搭建之四:Naive UI 组件库的安装和使用

    前言 如果对 vue3 的语法不熟悉的,可以移步 Vue3.0 基础入门Vue3.0 基础入门快速入门。 UI 组件请参考官网:Naive Ui 官网 为什么选择 naive ui 不继续用 element ui,因为尤大大推荐,可以尝试下,而且 naive ui 更贴近 vue3 的语法,当然易上手还是element ui 好一点。 github 开源库:Vue

    2024年02月07日
    浏览(74)
  • Vue3的几款UI组件库:Naive UI、Element Plus、 Ant Design Vue、Arco Design

    vue3系列的三款ui框架简要对比: 框架 Element Plus Naive ui Ant Design Vue Arco Design 简介 element-ui Vue3版本,国内使用广泛 Vue作者推荐的Vue3ui 组件库 Ant Design 的 Vue 实现,组件的风格与 Ant Design 保持同步 ArcoDesign 主要服务于字节跳动旗下中后台产品的体验设计和技术实现 社区活跃度

    2024年02月03日
    浏览(44)
  • Naive UI+Vue3来实现点击按钮一键切换明暗主题的功能

    记录一下如何使用Naive UI+Vue3代码来实现一键切换明暗主题的功能。 效果如下: 终端下输入: 起好项目的名称,然后一路回车即可。 至此Vue3的项目已经搭建完毕,打开http://127.0.0.1:5173/就可以看到项目的默认首页了。 安装Naive UI依赖库 然后我们根据官方出的配置对项目进行

    2024年02月12日
    浏览(40)
  • vue3 + typescript + vite + naive ui + tailwindcss + jsx 仿苹果桌面系统

    基于 vue3.x + typescript + vite + naive ui + tailwindcss + jsx + vue-router + pinia,项目使用 tsx 作为模版输出,全程没有使用vue提供的SFC, 仿macos桌面前端项目,开源免费模版,希望减少工作量和学习新技术,希望能够帮助大家; 本人主要是后端的开发,对于前端我也是刚入门的小白,有很

    2024年02月07日
    浏览(37)
  • vue3+Naive UI+fastapi 前后端分离 Pagination 数据分页实战演练

    记录一次vue3+Naive UI+fastapi 前后端分离 Pagination 数据分页实战演练的过程。 Naive UI 是一个 Vue3 的组件库。 FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。 fastapi-backend 后端目录 vue-frontend 前端目录 这里我只贴一些关

    2024年02月06日
    浏览(46)
  • Vue3 - 解决使用 Tailwindcss 后导致 UI 组件库样式受影响,引入后发现项目组件库的组件样式不对了(Element/Ant Design Vue/Naive UI/TDesign)

    网上的教程都无法解决,但本文可以帮助您快速解决该问题。 当项目引入 Tailwind css 后,使用 UI 组件库的某些组件时,发现有些样式丢失及显示错位、背景色丢失等问题, 频发于【按钮组件】背景色丢失 | 【message消息提示组件】样式位置变形等,严重的整个组件库样式都乱

    2024年02月07日
    浏览(57)
  • vue naive ui 按钮绑定按键

    知识点: 按键绑定Button 全局挂载使得message,notification, dialog, loadingBar 等NaiveUI 生效 UMD方式使用vue 与 naive ui 将vue默认的 分隔符大括号 替换 为 [[ ]] https://juejin.cn/post/7188032240775856185 https://www.naiveui.com/zh-CN/os-theme/components/discrete

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包