vue组件的基础 父子组件的传值

vue组件的基础 父子组件的传值

在我们vue项目目录中有个components文件在里面我们是专门注册组件的

创建组件

创建组件就跟我们创建一个vue文件一样的,它也有单独的data,methods,周期等,创建组件有全局创建和局部创建,但是我们几乎都只会用局部创建很少会用到全局创建,全局创建在打包时不管你用没用到都给你一起打包,局部我们创建过后了除自身不会使用,其余想在那使用就在那引入就行。

使用组件

在这里插入图片描述

父子组件之间的传值

通过props实现父组件向子组件传值

**父组件中**

在这里插入图片描述

子组件中
在这里插入图片描述

传递静态或动态的prop

prop类型可以是数组、对象方法等vue官网都有提到
添加链接描述
当传入一个对象并且我们要传入这个对象的所有的属性时

post: {
  id: 1,
  title: 'My Journey with Vue'
}
<component v-bind="post"></component >//等同于下面那行代码
<blog-post v-bind:id="post.id" v-bind:title="post.title"></blog-post>

单向数据流

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。
另外,每次父级组件发生变更时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。

//当我们需要改变从prop中获取到的值
//1、我们可以将获取到的值在本地的data里面进行初始化保存
props: ['initialCounter'],
data() {
  return {
    counter: this.initialCounter
  }
}
//或者通过computed属性也是可以的
props: ['size'],
computed: {
  normalizedSize: function () {
    return this.size.trim().toLowerCase()
  }
}

引用数据类型则不行,除非我们新开辟引用地址来将其保存,不新开的话因为都指向同一个引用地址所以不管父子任何一方改变,都会影响到用到该数据的地方

通过自定义事件实现子组件向父组件传值

父组件
在这里插入图片描述
子组件中
在这里插入图片描述
也可以通过emits来管理抛出的事件

在组件上还可以使用v-model但我怎么用过,有需要的话可以移步vue官网进行查看

插槽 slot

父组件
在这里插入图片描述
子组件
在这里插入图片描述

v-is

<table>
  <blog-post-row></blog-post-row>
</table>
//因为一些html标签的原因,这种嵌套不对是不能正确渲染的,得写下面那种
<table>
  <tr v-is="'blog-post-row'"></tr>//这里要注意 blog-post-row要是字符串才行
</table>

还有动态组件 这些偶尔给我们提供帮助 可以到官网进行查看
地址:
https://www.javascriptc.com/vue3js/guide/component-basics.html#%E5%8A%A8%E6%80%81%E7%BB%84%E4%BB%B6

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种流行的JavaScript框架,用于构建用户界面。在Vue中,父子组件之间传递数据是一种常见的需求。以下是一种常用的方法来实现父子组件之间的数据传递: 1. Props(属性):父组件可以通过props属性向子组件传递数据。在父组件中,通过在子组件标签上绑定属性的方式传递数据。在子组件中,可以通过props选项接收并使用这些数据。 父组件: ```html <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent component' }; } } </script> ``` 子组件: ```html <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] } </script> ``` 2. $emit(自定义事件):子组件可以通过$emit方法触发自定义事件,并将需要传递的数据作为参数传递给父组件。在父组件中,通过在子组件标签上监听自定义事件的方式接收数据。 父组件: ```html <template> <div> <child-component @child-event="handleChildEvent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { handleChildEvent(data) { console.log(data); // 在这里处理子组件传递的数据 } } } </script> ``` 子组件: ```html <template> <div> <button @click="emitEvent">触发事件</button> </div> </template> <script> export default { methods: { emitEvent() { this.$emit('child-event', 'Hello from child component'); // 触发自定义事件,并传递数据给父组件 } } } </script> ``` 以上是Vue中实现父子组件之间传递数据的两种常用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值