Vue父子传值
昨天创建完项目以后,今日首先使用项目来做一个简单的导航栏体会一下Vue的使用
1.项目的结构:

2.首先在Vheader.Vue中编辑代码:
<template>
<header class="header">
<div class="nav">
<div class="logo">
<img :src="imgSrc" alt="">
</div>
<div class="info">
<button>登录</button>
<button>注册</button>
</div>
</div>
</header>
</template> <script>
import imgSrc from "../assets/logo.png"
export default {
name: 'Vheader',
data() {
return {
imgSrc:imgSrc,
}
}
}
</script> <style scoped>
.header {
width: 100%;
height: 70px;
background-color: #fff;
box-shadow: 0 2px 4px 0 #c9c9c9;
}
.header .nav{
width: 980px;
height: 40px;
margin: 0 auto;
/*float: left;*/
background-color: transparent;
}
.nav .logo{
width: 100px;
height: 40px;
float: left;
}
.logo img{
width: 40px;
height: 40px;
}
.nav .info{
float: right;
width: 200px;
height: 40px;
}
.info button{
width: 80px;
height: 40px;
float: left;
}
</style>
3.App.vue主文件进行调用组件:
<!-- 一个组件由三部分组成 -->
<template>
<!-- 页面的结构 -->
<div class="app">
<Vheader class="header"> </Vheader>
<Vcontent></Vcontent>
<Vfooter></Vfooter> <h3>{{currentMsg}}</h3>
<img :src="imgSrc" alt=""> <ul>
<li v-for="item in getArray">
<a href="javascript">{{item}}</a>
</li>
</ul>
<button @click="clickHandler">修改</button> </div>
</template> <script>
//1.先引入组件
//file-loader
import imgSrc from './assets/logo.png'
import Vheader from './components/Vheader.vue'
import Vfooter from './components/Vcontent.vue'
import Vcontent from './components/Vfooter.vue'
//页面的业务逻辑
export default {
name: 'app',
data() { //data必须是一个函数
return { //必须return。
msg: "hello S9!",
starts: [
"邓超", "郑凯", "陈赫"
],
imgSrc: imgSrc, //将图片当成一个模块,引入成为对象。
}
},
methods: {
clickHandler() {
//这里跟msg紧密相关,一旦刷新页面会打印1,点击按钮msg发生
//了变化,那么这个1又打印1遍
console.log(1);
this.msg = "哈哈哈"
this.starts.push("baby")
} },
computed: {
currentMsg() {
return this.msg
},
getArray() {
return this.starts
} },
//2.挂载
components: {
Vheader: Vheader,
Vcontent: Vcontent,
Vfooter: Vfooter,
}
}
</script> <style scoped>
*{
padding: 0;
margin: 0;
}
</style>
最后就是整个流程的图。

下面就来说说怎么具体进行父子传值。
比如有这么一个场景,所有的数据肯定都是在app.vue中的,那么子组件怎么去拿到这个数据呢?

在app.vue这里有一个这个citys的数据,想要渲染在Vfooter中,怎么传过去呢?
<!--绑定自定义属性-->
<Vfooter :cityArray='citys' ></Vfooter>
然后切到Vfooter.vue中
<script>
export default {
name:'Vfooter',
data(){
return{ }
},
//父子传值利用props验证
props:{
cityArray:Array
}
}
</script>
首先对数据进行验证,然后在标签中渲染出来。
<template>
<footer>
<ul v-for='item in cityArray'>
{{item}}
</ul>
</footer>
</template>
到此数据传送完毕。
第二个就是父子触发事件的问题
比如在Vcontent中有一个button,点击button想要添加一个城市。如何去添加呢?
1.
在Vcontent.vue标签下绑定了点击事件。
<button @click="addCunHandler">添加村庄</button>
完了再下面的方法中写这个事件:
methods:{
addCunHandler(){
//触发自定义的事件
this.$emit('addZhuangHandler','通州' )
}
}
这里触发的自定制事件是添加村庄,需要触发app.vue中的事件,而且需要把点击传递的参数(也就是要添加的村庄)传入。
最后在app.vue中:
<!--自定义事件-->
<Vcontent v-on:addZhuangHandler="addHandler"></Vcontent>
子组件传过来触发了这个事件。
methods: {
clickHandler() {
//这里跟msg紧密相关,一旦刷新页面会打印1,点击按钮msg发生
//了变化,那么这个1又打印1遍
console.log(1);
this.msg = "哈哈哈";
this.starts.push("baby")
},
addHandler(str){
alert(str);
this.citys.push(str)
}
},
这个事件执行,弹框并且把传过来的值(通州)添加到这个数组中。
这个东西很重要!
总结一句话就是父级往子级传值 使用props
子级往父级传值 使用自定义事件 this.$emit()
Vue父子传值的更多相关文章
- 10.4 Vue 父子传值
简单示例 APP.vue <template> <div> <img :src="imgSrc"> <!-- 父子传值 --> &l ...
- day 100天 VUE 父子传值,单页面.
一 .静态资源导入方法 启动服务 npm run serve <template> <div id ="app"> <h3>{{msg}}& ...
- vue父子传值的具体应用
最近我负责的项目已经迭代到第四版了,我作为一个没啥经验的小菜鸟也成长了很多. 在这一版开发开始之前,我老大就要求我在开发过程中尽量实现组件化,因此,我也遇到了很多问题,但基本都解决了,所以趁周末把这些 ...
- vue父子传值与非父子传值
大概梳理下传值的几种方式 一:父子组件传值 props方式 子组件对外暴露方法并向父组件传递由于触发方法导致的值的变化,父组件接收子组件传递来的值:子组件接收父组件传递来的值,并根据传递来的值在子组件 ...
- vue 父子传值,子页面没有实时刷新的问题
在做高德地图的时候,发现列表点击编辑的时候,地图不能实时更新: <el-form-item label="门店坐标:" :label-width="formLabe ...
- vue——父子传值
转载地址:https://blog.csdn.net/xr510002594/article/details/83304141
- vue父子组件之间传值
vue父子组件进行传值 vue中的父子组件,什么是父组件什么是子组件呢?就跟html标签一样,谁包裹着谁谁就是父组件,被包裹的元素就是子组件. 父组件向子组件传值 下面用的script引入的方式,那种 ...
- vue父子组件的传值总结
久违的博客园我又回来了.此篇文章写得是vue父子组件的传值,虽然网上已经有很多了.写此文章的目的就是记录下个人学习的一部分.接下来我们就进入主题吧! 在开发vue项目中,父子组件的传值是避免不掉的. ...
- vue父子组件传值加例子
例子:http://element-cn.eleme.io/#/zh-CN/component/form 上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...
随机推荐
- Linux-centos7超过2TB使用parted命令分区
介绍说明: parted的操作都是实时的,也就是说你执行了一个分区的命令,他就实实在在地分区了, 而不是像fdisk那样,需要执行w命令写入所做的修改, 所以进行parted的测试千万注意不能在生产环 ...
- Linux 小知识翻译 - 「如何成为 Linux 内核开发者」
新年的开始,聊聊「怎么做才能成为Linux内核开发者」. Linux内核的开发都是由志愿开发者们完成的.他们并不属于某些特定的企业. 因此,你也有参加Linux内核开发的资格.不用说,卓越的编码技术以 ...
- selenium 使用
selenium selenium:可以让浏览器完成相关自动化的操作 环境安装: pip install selenium 编码流程: 导包 创建某一款浏览器对象 制定相关的行为动作 from sel ...
- Linux分区的几种方案
通用方法/boot 引导分区 200M swap 交换分区 内存的1.5倍(内存小于8G) 大于8G 给8G/ 根分区 剩下多少给多少 数据非常重要/bootswap/ 50-200G/data 剩下 ...
- socket.setSoTimeout(1000);
这个用来设置与socket的inputStream相关的read操作阻塞的等待时间,超过设置的时间了,假如还是阻塞状态,会抛出异常java.net.SocketTimeoutException: Re ...
- UVA1608-Non-boring sequences(分治)
Problem UVA1608-Non-boring sequences Accept: 227 Submit: 2541Time Limit: 3000 mSec Problem Descript ...
- [CQOI2018]破解D-H协议
嘟嘟嘟 这不就是个bsgs板儿嘛. 顺便就复习了一下bsgs和哈希表. 头一次觉得我的博客这么好用,一下就懂了:数论学习笔记之高次不定方程 这里再补充几点: 1.关于这一段代码: int S = sq ...
- springboot RestTemplate请求
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 1.定义 RestTemplateConfig 配置类 @Configuratio ...
- 强大的原生DOM选择器querySelector和querySelectorAll
在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...
- reedis 解决在windows下启动闪退
windows下安装https://github.com/MicrosoftArchive/redis/releases第一次启动报错: [2368] 21 Apr 02:57:05.611 # Cr ...