Vue: 子组件修改父组件数据以及子组件带参数修改父组件数据的方法 ( props)
前言:props属性的特点:(单向数据流)业务中会经常遇到两种需要改变props的情况,一种是父组件传递初始值进来,子组件将它作为初始值保存起来,在自己的作用域下可以随意使用和修改。这种情况可以在组件data中再声明一个数据,引用父组件的prop。$emit: $emit 触发当前实例上的事件,也可以简单的理解为触发父组件上的事件(向上冒泡)具体$emit参考官方文档:https://...
·
前言:
props属性的特点:(单向数据流) 业务中会经常遇到两种需要改变props的情况,一种是父组件传递初始值进来,子组件将它作为初始值保存起来,在自己的作用域下可以随意使用和修改。这种情况可以在组件data中再声明一个数据,引用父组件的prop。
$emit: $emit 触发当前实例上的事件,也可以简单的理解为触发父组件上的事件(向上冒泡)
具体$emit参考官方文档:https://cn.vuejs.org/v2/api/#vm-emit
无参数型:
案例:(一些解释请看注释)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div :style="{fontSize:fontSize+'px'}">{{pmsg}}</div>
<!-- 注意要加单位px 不然不会生效 -->
<menu-item :parr="parr" @enlarge-text="handle"></menu-item>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
// 子组件向父组件传值-基本用法
//props传递数据原则:单向数据流
Vue.component('menu-item', {
props: ['parr'],
template: `
<div>
<ul>
<li :key='index' v-for='(item,index) in parr'>{{item}}</li>
</ul>
<button @click='parr.push("lemon")'>添加lemon水果(这种方法不推荐)</button>
<!--直接子组件操作父组件传过来的数据 但是这种方法不推荐!!!-->
<!-- props传递过来的数据是单向数据流 只允许父组件向子组件中传递数据 但是不允许直接操作props中的数据-->
<button @click="$emit('enlarge-text')">扩大父组件字体大小</button>
</div>
`
});
var vm = new Vue({
el: '#app',
data: {
pmsg: '父组件中内容(初始size=10px 每次加5px)',
parr: ['apple', 'orange', 'banana'],
fontSize: 10
},
methods: {
handle: function() {
// 扩大字体大小
this.fontSize += 5;
}
}
});
</script>
</body>
</html>
有参数型:
结果:
案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="app">
<div :style='{fontSize: fontSize + "px"}'>{{pmsg}}</div>
<menu-item :parr='parr' @enlarge-text='handle($event)'></menu-item>
</div>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript">
/*
子组件向父组件传值-携带参数
*/
Vue.component('menu-item', {
props: ['parr'],
template: `
<div>
<ul>
<li :key='index' v-for='(item,index) in parr'>{{item}}</li>
</ul>
<button @click='$emit("enlarge-text", 5)'>扩大父组件中字体大小</button>
<button @click='$emit("enlarge-text", 10)'>扩大父组件中字体大小</button>
</div>
`
});
var vm = new Vue({
el: '#app',
data: {
pmsg: '父组件中内容',
parr: ['apple','orange','banana'],
fontSize: 10
},
methods: {
handle: function(val){
// 扩大字体大小
this.fontSize += val;
}
}
});
</script>
</body>
</html>
更多推荐
已为社区贡献4条内容
所有评论(0)