Vue指定组件内容的三种方式(el, template ,render)

指定组件显示的内容:new Vue({选项})

el 选项,通过一个选择器找到容器,容器内容就是组件内容

提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器,也可以是一个 HTMLElement 实例。

在实例挂载之后,元素可以用 vm.$el 访问。

如果在实例化时存在这个选项,实例将立即进入编译过程,否则,需要显式调用 vm.$mount() 手动开启编译。

项目中会有index.html 文件,里面会存在一个div

<div id="app"></div>

于main.js 中挂载,下面两种写法一样的。

new Vue().$mount('#app')
// 或者
new Vue({ el: '#app' })

template 选项

        一个字符串模板作为 Vue 实例的标识使用。模板将会 替换 挂载的元素,挂载元素的内容都将被忽略。

const vm = new Vue({
  el: '#app',
  template: `
    <div id="app-test">xxx</div>
  `,
})

render选项

        字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力。该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode。

        它是一个函数,函数回默认传人createElement的函数(h),这个函数用来创建结构,再render函数返回渲染为组件内容。它的优先级更高。

        Vue 选项中的 render 函数若存在,则 Vue 构造函数不会从 template 选项或通过 el 选项指定的挂载元素中提取出的 HTML 模板编译渲染函数。

import App from './App.vue'
new Vue({
    render:h=>h(App)
}).mount('#app')

// h() =====>  createElement()
// h(App) =====>  根据APP组件创建html结构
// render的返回值就是html结构,渲染到#app容器
// h() 函数参数,1.节点名称  2. 属性|数据 是对象  3. 子节点

  vue2.0 的h函数传参进来的,vue3.0 的h函数导入进来
  h 第一个参数 标签名字  第二个参数 标签属性对象  第三个参数 子节点

<script>
// vue2.0 的h函数传参进来的,vue3.0 的h函数导入进来
// render: h => {
//   // 返回值就是组件内容
//   return h()
// }
import { h } from 'vue'
export default {
  name: 'AppBread',
  render () {
    // 返回值就是组件内容
    // h 第一个参数 标签名字  第二个参数 标签属性对象  第三个参数 子节点
    return h('div', { class: 'app-bread' }, '我是内容')
  }
}
</script>

可以通过this.$slots来获取插槽内容

// 获取默认插槽的内容
const soltList = this.$slots.default()

 可以动态的去创建节点 例如:

render () {
    // 返回值就是组件内容
    // h 第一个参数 标签名字  第二个参数 标签属性对象  第三个参数 子节点
    // 获取默认插槽的内容
    const soltList = this.$slots.default()
    // 动态创建节点 最后一个item不加i标签
    const dymanicItems = []
    soltList.forEach((item, i) => {
      if (i === soltList.length - 1) return dymanicItems.push(item)
      // 在每个item元素 后面加一个i标签(箭头) 最后一个不加
      dymanicItems.push(item, h('i', { class: 'iconfont icon-angle-right' }))
    })
    return h('div', { class: 'app-bread' }, dymanicItems)
  }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3 的函数式组件是一种轻量级的组件形式,它通过使用 `defineComponent` 函数来定义组件。对于 `el-dialog` 组件的函数式实现,你可以按照以下步骤进行: 1. 首先,导入所需的 Vue 3 相关模块: ```javascript import { defineComponent, h } from 'vue'; ``` 2. 使用 `defineComponent` 函数创建一个函数式组件,传入一个对象作为参数: ```javascript const ElDialog = defineComponent({ name: 'ElDialog', functional: true, // 声明为函数式组件 props: { // 定义组件的 props title: String, content: String, // 其他 props... }, render(props, context) { // 组件的渲染逻辑 const { title, content } = props; return h('div', { class: 'el-dialog', }, [ h('h2', { class: 'el-dialog-title' }, title), h('p', { class: 'el-dialog-content' }, content), // 其他内容... ]); } }); ``` 在上述代码中,我们使用 `h` 函数来创建虚拟节点,以描述组件的结构。通过传入标签名和属性,我们可以构建出 `el-dialog` 组件的结构。 3. 最后,我们需要在父组件中使用 `ElDialog` 组件: ```html <template> <div> <el-dialog title="对话框标题" content="对话框内容"></el-dialog> </div> </template> <script> import ElDialog from './ElDialog.vue'; export default { components: { ElDialog, }, }; </script> ``` 在父组件中,我们可以直接使用 `el-dialog` 标签,并传入所需的属性。 这样,你就可以实现一个基于函数式组件的 `el-dialog` 组件了。当然,上述代码只是一个简单的示例,你可以根据实际需求进行更复杂的组件逻辑和样式定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李公子丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值