父组件往子组件传递数值。子组件监听变化渲染。

父组件:

<template>
	<all-parameter :define="parameterDefine" v-model="provider.parameter" v-on:regionChange="regionChange"></all-parameter>
</template>

<script>
import allParameter from '../component/allParameter';
import Vue from 'vue';

export default {
	//组件注册
	components: {
		allParameter,parameterSelect,parameterString
	},
	//变量
	data(){
		return {
			parameterDefine:[];
		}
	},
	method:{

		paramChange(param){
			let tempParameterDefine = param;
			Vue.set(this,"parameterDefine" ,tempParameterDefine );//(1、)第一次赋值。子组件渲染
			this.$http.get().then(response =>{
				tempParameterDefine.option=response.body.data;//改变的是对象的某个属性值。
				Vue.set(this,"parameterDefine" ,tempParameterDefine );//(2、)第二次赋值。子组件渲染???????
			})
		}
	}

}
</script>



子组件:

//子组件通过props来接收数据: 
props: {
    define:{type:"Object" , default:{}},
 },
//监听define变化
watch:{
       define(define, olddefine) {
       reload(define);
}
//通用方法
method:{
	reload(define);
}



常见问题:

1、JavaScript对象赋值,赋值的引用。

父组件中,1,2位置,tempParameterDefine 的改变,是tempParameterDefine指向的那块内存的值变了。但是引用没有变。传递到自组件表现为没有变化。所以自组件没有渲染。

归根节点还是JavaScript基础问题:我在做这块的时候,忽略了这个问题呢,结果晕了好一会儿。

解决:先Vue.set(this , "parameterDefine" , {})。让他变一下。

paramChange(param){
			let tempParameterDefine = param;
			Vue.set(this,"parameterDefine" ,tempParameterDefine );//(1、)第一次赋值。自组件渲染
			this.$http.get().then(response =>{
				tempParameterDefine.option=response.body.data;//改变的是对象的某个属性值。
				Vue.set(this , "parameterDefine" , {})//让他变一下
				Vue.set(this,"parameterDefine" ,tempParameterDefine );//(2、)第二次赋值。自组件重新渲染
			})
		}

2、父组件里调用子组件的方法。

父组件:在子组件上加上 ref. 在父组件的方法中,通过this.$refs.child.reload();调用子组件的 reload方法。

<template>
	<all-parameter :define="parameterDefine" v-model="provider.parameter" ref="child"></all-parameter>
</template>