vue中is的作用和用法

一、is 的核心作用

1. 解决 HTML 原生标签的解析限制(最常见场景)

HTML 中有一些原生标签(如 <ul>/<ol>/<table>/<select>)对直接嵌套的子标签有严格限制:

  • <ul> 只能包含 <li>
  • <table> 只能包含 <tr>/<tbody>
  • <select> 只能包含 <option>/<optgroup>

如果直接在这些标签内使用 Vue 自定义组件(比如 <my-li>),浏览器会因为解析规则错误,导致组件渲染异常、样式失效或功能异常。此时通过 is 属性可以让 Vue 正确识别组件,同时满足 HTML 语法规范。

示例:解决 <table> 标签的嵌套限制

复制代码
<template>
  <!-- 错误写法:<table> 内直接写自定义组件,浏览器解析会出错 -->
  <table>
    <!-- <my-tr></my-tr> 这种写法会被浏览器当作无效标签,渲染异常 -->
  </table>

  <!-- 正确写法:用 is 指定自定义组件 -->
  <table>
    <!-- <tr> 是符合 <table> 规范的标签,通过 is 告诉 Vue 渲染 my-tr 组件 -->
    <tr is="my-tr"></tr>
  </table>
</template>

<script>
export default {
  components: {
    MyTr: {
      template: '<td>这是自定义的表格行</td>'
    }
  }
}
</script>
2. 实现动态组件(核心功能)

通过 is 绑定一个变量,可以动态切换要渲染的组件,实现 "一个容器渲染不同组件" 的效果,是 Vue 实现组件切换的极简方案。

示例:动态切换组件

复制代码
<template>
  <div>
    <!-- 按钮切换组件 -->
    <button @click="currentComponent = 'componentA'">显示组件A</button>
    <button @click="currentComponent = 'componentB'">显示组件B</button>

    <!-- 核心:通过 is 动态绑定要渲染的组件名 -->
    <component :is="currentComponent"></component>
  </div>
</template>

<script>
export default {
  data() {
    return {
      // 默认显示 componentA
      currentComponent: 'componentA'
    }
  },
  components: {
    ComponentA: {
      template: '<div>我是组件A</div>'
    },
    ComponentB: {
      template: '<div>我是组件B</div>'
    }
  }
}
</script>

动态组件切换时,若想保留组件状态(比如输入框内容),需配合 <keep-alive> 使用:

复制代码
<keep-alive>
  <component :is="currentComp"></component>
</keep-alive>
相关推荐
invicinble1 小时前
c端系统,其实更像一个信息展示平台
前端
你怎么知道我是队长1 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
李姆斯2 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜2 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司3 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:ModalBottomSheet 实战
android·javascript·学习·flutter·华为·harmonyos
江华森3 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒4 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
Jackson__4 小时前
为什么 Agent 越聊越慢?聊聊 Context(上下文)管理
前端·agent·ai编程
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法