Vue props、插槽

本文详细介绍了Vue.js中组件之间的数据传递方法,包括props的使用、访问根实例、操作DOM,以及如何通过插槽进行内容分发。涵盖了静态和动态props的设置,以及如何在子组件中访问父组件传递的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.props 子组件接受父组件传递过来的数据

通常你希望每个 prop 都有指定的值类型。这时,你可以以对象形式列出 prop,这些属性的名称和值分别是 prop 各自的名称和类型:

props: {
  title: String,//
  likes: Number,
  isPublished: Boolean,
  commentIds: Array,
  author: Object,
  callback: Function,
 }
静态props
<div title=“组件”>父组件<div>
export default{
  props:{
  title: String
  }
}
动态props
<div :age='age'>父组件<div>
export default{
  props:{
  title: String
  }
}

2.
访问根实例
new Vue({
  data(){
    return{
      foo:"aoshilin"//foo可以在任何子组件中访问(访问根实例)
    }
  },
  render: h => h(App),
}).$mount('#app')
任意组件访问根实例:
computed:{
  getfool(){
    return this.$root.foo
  }
}
任意组件写入根实例:
computed:{
  getfool(){
    return this.$root.foo=‘wangsicong’
  }
}
操作原声dom
mounted(){
this.$refs. p1.innerHTML="改变p1的内容"
}
 
 
3.插槽
插槽(内容分发),谁调用它他就给谁内容
父级组件传递数据
<div class=‘parent’>
<child>
<div>hello 插槽</div>
</child>
</div>
子级组件
<div class=“child”>
<slot>展示内容</slot>
</div>
 
具名插槽
父级组件传递数据
<template> 
<div class="parent">
<child slot="v1">
<template>
<p>这个父组件的数据</p>
</template>
</child>
</div>
</tempate>
子组件
<solt name="v1">默认信息</solt>//没数据传递默认信息
<solt name="v1">{{meg}}</solt>//meg是·在父组件里面就定义的,即使在自组件定义一样的也没用
结果:这个父组件的数据
 
作用域插槽
父级组件传递数据
<template> 
<div class="parent">
<child>
<template  slot-scope="slotpeops">
<p>{{slotprops.ct}}</p>//父组件展示效果
</template>
</child>
</div>
</tempate>
子组件
<slot ct="儿子的数据<slot>//展示的内容是子组件决定的,效果由父组件决定。
 
 
 
 
 
 
new Vue({
data(){
return{
foo:"aoshilin"//foo可以在任何子组件中访问(访问根实例)

}
},
render: h => h(App),
}).$mount('#app')

转载于:https://www.cnblogs.com/aoshilin/p/10720230.html

<think>嗯,用户想了解Vue2中插槽的使用方法,我需要先回忆一下Vue2的插槽相关知识。首先,Vue插槽分为默认插槽、具名插槽和作用域插槽。默认插槽是最基础的,允许父组件向子组件传递内容。具名插槽则可以定义多个插槽,通过名字来区分。作用域插槽能让子组件的数据在父组件的插槽内容中使用。 然后,我需要确保回答的结构清晰,按照用户的要求分步骤说明。可能需要先介绍基本用法,再逐步深入不同类型的插槽。同时,用户提到了示例,所以每个部分都应该有代码示例,而且要符合Vue2的语法,比如使用slot属性而不是v-slot指令,因为Vue2默认使用slot和slot-scope。 还要注意引用用户提供的站内引用,比如引用[1]中的例子,说明如何在子组件中定义插槽,父组件如何传递内容。引用[2]提到了使用插槽Vue-LayUI中的实际应用,比如侧边栏和导航组件,可能需要结合这些例子来展示插槽的实际应用场景。 另外,用户可能在使用过程中遇到问题,比如作用域插槽的数据传递,或者具名插槽的命名冲突,需要给出常见问题的解决方法。例如,作用域插槽Vue2中使用slot-scope属性,而在Vue3中则是v-slot,这点需要明确区分,避免用户混淆。 还有,用户提供的引用[3]提到vue-router的安装问题,虽然和插槽无关,但需要注意在示例代码中不要出现Vue3的语法,比如使用<template v-slot>,而是应该用旧的语法,比如slot="header"和slot-scope。 最后,生成相关问题时要围绕插槽的深入使用、与其他技术的结合以及常见问题,确保问题对用户有帮助,引导他们进一步学习。</think>### Vue2 插槽使用指南(分步说明) #### 一、基础插槽 1. **默认插槽**(父组件内容注入子组件指定位置) ```html <!-- 子组件 ChildComponent.vue --> <template> <div class="container"> <h3>子组件标题</h3> <slot></slot> <!-- 默认插槽占位 --> </div> </template> <!-- 父组件使用 --> <child-component> <p>这是父组件传递的内容</p> </child-component> ``` *效果:`<p>`标签内容会出现在子组件`<slot>`位置[^1]* #### 二、具名插槽 2. **多内容区域分配**(通过命名区分不同插槽) ```html <!-- 子组件 Layout.vue --> <template> <div> <header> <slot name="header"></slot> </header> <main> <slot></slot> <!-- 默认插槽 --> </main> </div> </template> <!-- 父组件使用 --> <layout> <template slot="header"> <h1>自定义头部</h1> </template> <p>主要内容区域</p> </layout> ``` *说明:使用`slot="name"`指定插入目标[^2]* #### 三、作用域插槽 3. **子组件向父组件传递数据** ```html <!-- 子组件 DataList.vue --> <template> <ul> <li v-for="item in items" :key="item.id"> <slot :item="item">{{ item.defaultText }}</slot> </li> </ul> </template> <!-- 父组件使用 --> <data-list :items="listData"> <template slot-scope="props"> <span class="highlight">{{ props.item.customText }}</span> </template> </data-list> ``` *特性:通过`slot-scope`接收子组件数据[^2]* #### 四、最佳实践 4. **组合应用示例**(后台管理系统布局) ```html <!-- 布局组件 AdminLayout.vue --> <template> <div class="admin-layout"> <div class="sidebar"> <slot name="sidebar"></slot> </div> <div class="content"> <slot></slot> </div> </div> </template> <!-- 使用示例 --> <admin-layout> <template slot="sidebar"> <nav-menu :items="menuItems"/> </template> <data-table :columns="tableColumns"/> </admin-layout> ``` #### 五、常见问题解决 **问题1:插槽内容不显示** - 检查父组件是否在子组件标签内添加内容 - 确认具名插槽的命名一致性 **问题2:作用域数据未传递** - 确保子组件`<slot>`使用数据绑定`:dataName="dataValue"` - 父组件正确声明`slot-scope`接收变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值