uniapp - sync关键字

.sync修饰字在vue1.0作为双向数据绑定而存在,在2.0时被砍掉。而后在2.3被当做语法糖加入 (vue单向绑定数据流通)

 

假设一个需求是:父组件值传入到子组件,然后子组件更改后父组件的值也得更改

 

1. 通过props传值,data赋值的操作实现(避免出现双向数据绑定错误)

index.vue

<template>
	<view class="content">
		<onA :number.sync="num"></onA>
		父组件:{{num}}
	</view>
</template>

<script>
	import onA from '@/components/onA.vue';
	export default {
		data() {
			return {
				num: 10
			}
		},
		components: {
			onA
		},
		onLoad() {},
		mounted() {

		},
		methods: {
		}
	}
</script>

<style>
	.title {
		color: #007AFF;
	}
</style>

 

onA.vue

<template>
	<view @click="fn">
		子组件:
		{{numberCache}}
	</view>
</template>

<script>
	export default {
		data() {
			return {
				numberCache: null
			}
		},
		props: ['number'],
		created() {
			this.numberCache = this.number;
		},
		methods: {
			fn() {
				// 这里处理它就好
				this.numberCache++;
				this.$emit('update:number', this.numberCache);
			}
		},
		mounted() {

		}
	}
</script>

<style lang="scss" scoped>
	.title {
		color: #F0AD4E;
	}
</style>

  

我们也可以利用子组件this.$emit传值再赋值的形式去更新父组件的值.

 

2. 如果不想引起双向数据绑定报错可以通过ref标识向子组件赋值

 


index.vue(父组件)

<template>
	<view class="content">
		<onA :number.sync="num" ref="on"></onA>
		父组件:{{num}}
	</view>
</template>

<script>
	import onA from '@/components/onA.vue';
	export default {
		data() {
			return {
				num: 10
			}
		},
		components: {
			onA
		},
		onLoad() {},
		mounted() {
			this.$refs.on._data.number = this.num;
		},
		methods: {}
	}
</script>

<style>
	.title {
		color: #007AFF;
	}
</style>

 

onA.vue

 

<template>
	<view @click="fn">
		子组件:
		{{number}}
	</view>
</template>

<script>
	export default {
		data() {
			return {
				number: null
			}
		},
		methods: {
			fn() {
				this.number++;
				this.$emit('update:number', this.number);
			}
		},
		mounted() {

		}
	}
</script>

<style lang="scss" scoped>
	.title {
		color: #F0AD4E;
	}
</style>

 

  

posted @ 2020-01-15 15:16  Sunsin  阅读(3007)  评论(0编辑  收藏  举报