首页 > 其他分享 >vue3 template 特殊的标签

vue3 template 特殊的标签

时间:2024-07-21 16:29:05浏览次数:10  
标签:vue default 标签 插槽 template vue3 组件 ChildComponent

在 Vue.js 中,<template> 标签是一种特殊的标签,它用于定义组件的模板,但不会直接渲染为 HTML 元素。它的主要用途是在编写组件和使用插槽时提供灵活的模板定义。以下是关于 <template> 标签的一些关键概念和使用示例。

基本用法

  1. 组件模板:在单文件组件中(.vue 文件),<template> 标签用于包裹组件的模板部分。
<template>
  <div>
    <h1>{{ title }}</h1>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: 'Hello, Vue!',
      message: 'Welcome to the Vue.js world.'
    };
  }
};
</script>

2.条件渲染:结合 v-ifv-else 指令,<template> 标签可以用于包裹多元素结构。

<template>
  <div>
    <template v-if="loggedIn">
      <p>Welcome back, user!</p>
      <button @click="logout">Logout</button>
    </template>
    <template v-else>
      <p>Please log in.</p>
      <button @click="login">Login</button>
    </template>
  </div>
</template>

<script>
export default {
  data() {
    return {
      loggedIn: false
    };
  },
  methods: {
    login() {
      this.loggedIn = true;
    },
    logout() {
      this.loggedIn = false;
    }
  }
};
</script>

循环渲染:结合 v-for 指令,<template> 标签可以用于包裹循环渲染的多元素结构。

<template>
  <div>
    <ul>
      <template v-for="(item, index) in items" :key="index">
        <li>{{ item.name }}</li>
        <li>{{ item.value }}</li>
      </template>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { name: 'Item 1', value: 100 },
        { name: 'Item 2', value: 200 },
      ]
    };
  }
};
</script>

插槽 (Slots)

在 Vue.js 中,插槽用于向子组件传递内容。通过 <template> 标签和插槽属性,可以自定义子组件内部的内容布局。

基本插槽

子组件 (ChildComponent.vue)

<template>
  <div>
    <slot></slot> <!-- 默认插槽 -->
  </div>
</template>

 

父组件 (ParentComponent.vue)

<template>
  <div>
    <ChildComponent>
      <p>This is passed to the child component.</p>
    </ChildComponent>
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  }
};
</script>

命名插槽

子组件 (ChildComponent.vue)

<template>
  <div>
    <header>
      <slot name="header"></slot>
    </header>
    <main>
      <slot></slot> <!-- 默认插槽 -->
    </main>
    <footer>
      <slot name="footer"></slot>
    </footer>
  </div>
</template>

父组件 (ParentComponent.vue)

<template>
  <div>
    <ChildComponent>
      <template #header>
        <h1>This is the header</h1>
      </template>
      <p>This is the main content passed to the default slot.</p>
      <template #footer>
        <p>This is the footer</p>
      </template>
    </ChildComponent>
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  }
};
</script>

作用域插槽 (Scoped Slots)

子组件 (ChildComponent.vue)

<template>
  <div>
    <slot :items="items"></slot> <!-- 传递作用域数据 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
      ]
    };
  }
};
</script>

父组件 (ParentComponent.vue)

<template>
  <div>
    <ChildComponent>
      <template #default="scope">
        <ul>
          <li v-for="item in scope.items" :key="item.id">{{ item.name }}</li>
        </ul>
      </template>
    </ChildComponent>
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  }
};
</script>

总结

<template> 标签在 Vue.js 中具有多种用途,包括定义组件模板、实现条件和循环渲染,以及使用插槽自定义子组件内容。它提供了一种灵活的方式来编写和组织 Vue 组件,使得组件之间的内容传递和布局定制更加方便和强大。

标签:vue,default,标签,插槽,template,vue3,组件,ChildComponent
From: https://www.cnblogs.com/beichengshiqiao/p/18314621

相关文章

  • vue3 Promise处理异步操作的对象
    Promise是JavaScript中用于处理异步操作的一种对象。它代表了一个异步操作的最终完成(或失败)及其结果值。在处理异步操作时,Promise提供了一种更干净、更可读的方式来管理回调函数。Promise的状态一个Promise对象有三种状态:Pending(进行中):初始状态,操作尚未完成。Fulfille......
  • vue3 await
    在JavaScript中,await是一个用于处理异步操作的关键字。它只能在async函数内部使用,并且用于等待一个Promise对象的解析。在Vue3中,await关键字常用于在组合式API的setup函数中处理异步操作,比如数据获取。使用await的示例以下是一个使用await关键字的简单示例,它......
  • vue3 async 关键字
    async关键字用于声明一个异步函数,这个函数会返回一个Promise对象。与await关键字配合使用时,可以在异步函数中暂停代码执行,直到Promise解决或拒绝,从而使异步代码的处理更简单和同步化。使用async的示例下面是一个完整的Vue3组件示例,展示了如何使用async和await来......
  • vue3 onMounted是一个生命周期钩子函数
    onMounted是一个生命周期钩子函数,在组件挂载到DOM后运行。在这里你可以执行需要在组件可用后进行的操作,比如获取数据、设置订阅或初始化第三方库。使用示例:import{onMounted}from'vue';onMounted(()=>{//组件挂载后执行的代码console.log('组件已挂载!');......
  • Standard Template Libary or C++ Standard Library
    C++提供一套标准的library称为C++standardlibrary完全以template完成,所以又被称为StandardTemplateLibrary。这套library专门有于实现常用的据结构(例如arry、list......)以及常用的算法(例如push,pop,insert,delete,query,retrieval......)。一般来说,STL包含六个主要的组件......
  • 交叉验证函数返回“未知标签类型:(array([0.0, 1.0], dtype=object),)”
    以下是完整的错误:`---------------------------------------------------------------------------ValueErrorTraceback(mostrecentcalllast)CellIn[33],line21gnb=GaussianNB()---->2cv=cross_val_score(gnb,X_train......
  • 从 python 中的字符串列表中提取 def 定义函数的标签
    我想使用Python中的正常def过程创建函数,并将标签分配给从字符串列表中提取的命名空间。如何实现这一点?这个问题的动机:我正在创建一个与sympy兼容的python函数库,供数学家用于符号计算实验。许多函数需要初始化具有相关标签的多个对象的系统,这些标签分别由用户提供的字......
  • 易优CMS模板标签load文件加载导入外部的css样式文件
    【基础用法】标签:load描述:资源文件加载,比如:css/js用法:{eyou:loadhref='/static/js/common.js'ver='on'/}属性:file=''资源文件路径href=''远程资源文件URLver=''开启版本号自动刷新浏览器缓存涉及表字段:无【更多示例】-------------------------------示例1------......
  • 易优CMS模板标签global全局变量输出网站关键词
    【基础用法】标签:global描述:获取系统全局配置变量内容用法:{eyou:globalname='web_title'/}或者{$eyou.global.web_title}文件:系统模板引擎属性:name=''变量名涉及表字段:请查阅网站后台的【设置】-【基本信息】web_status关闭网站web_name网站名称web_logo网站LOGO......
  • Tool-Gitlab-Issue-template
    Tool-Gitlab-Issue-template创建一个高效的Bug报告Issue模板。.gitlab/issue_templates/bug.md以下是一个推荐的GitLabBugReportIssue模板示例。可以根据项目的具体需求调整这个模板:---title:"[BUG]简短描述问题"labels:bugassignees:---###描述请详细描述......