Vue 组件的单向数据流

单向数据流

通过 props 传递数据是单向的,父组件数据变化会传递给子组件,而反过来不行。

目的:尽可能将父子组件解稿,避免子组件无意中修改了父组件的状态。

应用场景:

父组件传递初始值,子组件将初始值保存起来,在自己的作用域下可以随意使用和修改。这种情况可以在组件的 data 种声明一个数据,引用父组件传递过来的 props。

步骤:

  1. 注册组件
  2. 将父组件的数据传递进来给子组件 props 接收
  3. 将传递进来的数据通过初始值保存起来(通过 this. 直接获取)
<div id="app">
  <child-component msg="我是父组件传递的数据"></child-component>
</div>

<script>
  var app = new Vue({
    el: '#app',
	data: {},
	components: {
	  'child-component': {
		props: ['msg'],
		template: '<div>{{childMsg}}</div>',
		data: function() {
		  return {
			// 通过 this.msg 获取初始值并保存到本地的 childMsg
			childMsg = this.msg
		  }
		}
	  } 
	}
  })
</script>

prop 作为需要被转变的原始值传入,此时用计算属性就可以了。

步骤:

  1. 注册组件
  2. 将父组件的数据传递进来给子组件 props 接收
  3. 将传递进来的数据通过计算属性重新计算
// 通过 input 中输入的数据直接改变 div 的宽度
<div id="app">
  <input type="text" v-model="width">
  <child-component :width="width" init="请输入宽度"></child-component> 
</div>

<script>
  var app = new Vue({
    el: '#app',
	data: {
	  width: ''
	},
	components: {
	  'child-component': {
		props: ['init', 'width'],
		template: '<div :style="style">{{init}}</div>',
		computed: {
		  style: function() {
			return {
			  width: this.width + 'px',
			  background: 'red'
			}
		  }
		}
	  } 
	}
  })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值