vue参数和方法的使用父传子

336 阅读1分钟

代码

<!DOCTYPE html>
	<html>
<head>
	<meta charset="utf-8">
	<title>vue参数和方法的使用</title>
	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
	<div id="app">
		{{msg}}
		<!-- 通过v-bind将子元素绑定父元素数据并重命名-->
		<comp01 v-bind:pmsg="msg" v-bind:pmessage="message"></comp01>
		<ul>
			<compli  v-for="(item,i) in list"  v-bind:index = "i" v-bind:todo="item"></compli>
		</ul>
	</div>
	<template id="tmp1">
		<div>
			<input type="button" value="修改传到子元素中的父数据"  @click="changeMsg"/>
			<h3>这是组件(子元素)---{{msg}},{{pmessage}}</h3>
		</div>
	</template>
	<template id="tmp2">
		<li>{{index}}:{{todo.text}}</li>
	</template>
	<script type="text/javascript">
		var vm = new Vue({
			el: "#app",
			data: {
				msg: "这是父元素中的数据",
				message:"这是父元素另一个数据",
				list:[{ text: '学习 JavaScript' }, { text: '学习 Vue' }, { text: '整个牛项目' }]
			},
			methods: {

			},
			components: {
				comp01: {
					template: "#tmp1",
					data: function() {
						return {
							msg: "这是子元素中的数据"
						}
					},
					// 返回值为数据,将重命名的父数据的名字添加到列表中
					props: ['pmsg','pmessage'],
					methods:{
						changeMsg(){
							// 直接修改获取的父元素的数据,只能修改在子元素的部分,父元素数据不变
							// this.pmsg = this.pmsg+123
							//可以直接以this.pmsg的形式获取父元素的数据,进行运算
							this.msg = this.pmsg+123
						}
					}
				},
				compli:{
					template:"#tmp2",
					props:['index','todo']
				}
			},

		})
	</script>
</body>
	</html>

分析

1.1

  • 创建对象
  • 创建模板
  • 绑定v-bind:pmsg="msg"
  • 父向子传值 props: ['pmsg'] 与 methods方法同级

1.2 修改传递到子元素中的数据

  • 在组件中加入点击事件
  • 在组件方法中写事件this.msg = this.pmsg+123
以上方法可以进行修改,但是父级的值没有变化会报错 // 直接修改获取的父元素的数据,只能修改在子元素的部分,父元素数据不变
  • //可以直接以this.pmsg的形式获取父元素的数据,进行运算 this.msg = this.pmsg+123
this.msg是子元素数据,将子元素的值赋值父元素的值
v-bind:pmsg="msg" 通过v-bind将子元素绑定父元素数据并重命名
// 返回值为数据,将重命名的父数据的名字添加到列表中 props: ['pmsg']

1.3 父元素向子元素传数组对象循环输出

  • data 中加入列表list:[{ text: '学习 JavaScript' }, { text: '学习 Vue' }, { text: '整个牛项目' }]

  • props:['index','todo']

  • template中加入引用值

      <template id="tmp2">
      	<li>{{index}}:{{todo.text}}</li>
      </template>
    
  • 在使用的div部分引用组件