props验证与默认值,Vue的双向数据绑定,Vue组件父传子,子传父,兄弟通信

1. props验证与默认值

父props与子props是单向下行绑定:父级的props的值更新会流动到子组件中,但反过来却不行。
避免子组件意外改变父级组件的状态,导致数据流混乱。
每次父级组件发生更新时,子组件中所有的props都将会刷新为最新的值。
不能在子组件内部改变props,否则会导致浏览器控制台发出警告
子组件要修改时,用$emit调用自定义事件,父组件接到后由父组件修改
改变props的常用例子:

  1. 这个用来传递一个初始值;这个组件接下来希望将其作为一个本地的数据来使用,要定义一个本地属性用做初始值、

      props:['initialCounter'],
      data:function(){
      return{
      counter:this.initialCounter
      	}
      }
    
  2. 这个以一种原始的值传入且需要进行转换,定义一个计算属性

      props:['size'],
      computed:{
      normalizedSize:function(){
      return this.size.trim().toLowerCase()
      	}
      }
    

2. Vue的双向数据绑定

  1. 定义数据监听器Observer,能够对数据对象所有属性进行监听,数据有变动会获取新值并通知订阅者;
  2. 定义一个指令解析器Compile,对每个元素节点指令进行扫描,根据指令模板替换数据,以及绑定相应的更新函数;
  3. 实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图;

Vue实现双向数据绑定主要采用:数据劫持结合“发布-订阅”模式的方式,通过Object.defineproperty()的set和get,在数据变动是发布消息给订阅者触发监听。

Vue组件父传子,子传父,兄弟通信

1. 父传子:(通过props实现)

  1. 在父组件中给子组件标签绑定一个属性,属性上挂载需要传递的值;

  2. 在子组件通过props[“自定义属性名”]来接受数据;

以下是三种方法,没用vue写,引入vue.js文件,以下是HTML代码:

<body>
    <div id="app">
        <child></child>
    </div>
    <script src="./vue.js"></script>//引入vue.js文件
    <script>
        const child = {
    
            // props: ['msg'], // 第一种方法
            inject: ['name', 'age', 'tel'],
            template:  `
                <div>
                    这是子组件
                    {
     {msg}} {
     {name}} -- {
     {age}} -- {
     {tel}}
                </div>
            `,
            data() {
    
                return {
    
                    msg: ''
                }
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3中,父组件向子组件传递数据的方式与Vue 2中的props传递方式类似。通过在父组件使用props属性来定义需要传递给子组件数据,并在子组件中通过props来接收这些数据。具体步骤如下: 1. 在父组件中,定义需要传递给子组件数据。可以通过在子组件标签中使用"v-bind"或简写的":"语法来绑定组件数据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> ``` 2. 在子组件中,通过props属性声明接收父组件传递的数据。可以使用props属性的数组语法来声明需要接收的props。例如: ```html <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] }; </script> ``` 现在,子组件就可以通过this.message来访问传递过来的父组件props数据。 需要注意的是,在Vue 3中,props的声明方式也可以通过对象语法来实现更多的配置选项。例如,可以为props指定类型、默认值、是否必需等信息。具体的props配置可以参考Vue官方文档。 综上所述,Vue 3中父组件向子组件传递数据的方式与Vue 2中类似,通过在父组件使用props属性定义要传递的数据,并在子组件中通过props属性声明接收这些数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解vue2父组件传递props异步数据到子组件的问题](https://download.csdn.net/download/weixin_38750721/12777608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vueprops实现子组件随父组件一起变化](https://download.csdn.net/download/weixin_38737366/12791776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue组件向子组件(props)传递数据的方法](https://download.csdn.net/download/weixin_38739942/13202461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会撸串的傻狍子

感谢您的认可

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

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

打赏作者

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

抵扣说明:

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

余额充值