昨天创建完项目以后,今日首先使用项目来做一个简单的导航栏体会一下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父子传值的更多相关文章

  1. 10.4 Vue 父子传值

    简单示例 APP.vue <template> <div> <img :src="imgSrc"> <!-- 父子传值 --> &l ...

  2. day 100天 VUE 父子传值,单页面.

     一 .静态资源导入方法 启动服务  npm run serve <template> <div id ="app"> <h3>{{msg}}& ...

  3. vue父子传值的具体应用

    最近我负责的项目已经迭代到第四版了,我作为一个没啥经验的小菜鸟也成长了很多. 在这一版开发开始之前,我老大就要求我在开发过程中尽量实现组件化,因此,我也遇到了很多问题,但基本都解决了,所以趁周末把这些 ...

  4. vue父子传值与非父子传值

    大概梳理下传值的几种方式 一:父子组件传值 props方式 子组件对外暴露方法并向父组件传递由于触发方法导致的值的变化,父组件接收子组件传递来的值:子组件接收父组件传递来的值,并根据传递来的值在子组件 ...

  5. vue 父子传值,子页面没有实时刷新的问题

    在做高德地图的时候,发现列表点击编辑的时候,地图不能实时更新: <el-form-item label="门店坐标:" :label-width="formLabe ...

  6. vue——父子传值

    转载地址:https://blog.csdn.net/xr510002594/article/details/83304141

  7. vue父子组件之间传值

    vue父子组件进行传值 vue中的父子组件,什么是父组件什么是子组件呢?就跟html标签一样,谁包裹着谁谁就是父组件,被包裹的元素就是子组件. 父组件向子组件传值 下面用的script引入的方式,那种 ...

  8. vue父子组件的传值总结

    久违的博客园我又回来了.此篇文章写得是vue父子组件的传值,虽然网上已经有很多了.写此文章的目的就是记录下个人学习的一部分.接下来我们就进入主题吧! 在开发vue项目中,父子组件的传值是避免不掉的. ...

  9. vue父子组件传值加例子

    例子:http://element-cn.eleme.io/#/zh-CN/component/form         上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...

随机推荐

  1. git笔记(1)-搭建

    1. git下载 地址:https://git-scm.com/download/win 2. 安装(略) 3. 创建本地仓库 方法一:(1) 打开git bash here, 进入相应目录(打算创建 ...

  2. AI学习---TensorFlow框架介绍[图+会话+张量+变量OP+API]

    TensorFlow的数据流图 TensorFlow的结构分析: 图 + 会话 TensorFlow = 构图阶段(数据与操作的执行步骤被描绘出一个图) + 执行图阶段(使用回话执行构建好的图中操作) ...

  3. 怎么将后缀为.opt,.frm,.myd,.myi文件还原或者是导入mySQL中

    其实这个问题的解决方案很简单,把这些文件连同这些文件所在的文件夹原封不动地复制到你的 mysql 文件夹下的 data 里面 (在我的电脑里面是D:\xampp\mysql\data), 然后你进my ...

  4. python3编写网络爬虫14-动态渲染页面爬取

    一.动态渲染页面爬取 上节课我们了解了Ajax分析和抓取方式,这其实也是JavaScript动态渲染页面的一种情形,通过直接分析Ajax,借助requests和urllib实现数据爬取 但是javaS ...

  5. 查看linux中的TCP连接数

    一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议 ...

  6. (转)Spring Boot(十一):Spring Boot 中 MongoDB 的使用

    http://www.ityouknow.com/springboot/2017/05/08/spring-boot-mongodb.html MongoDB 是最早热门非关系数据库的之一,使用也比较 ...

  7. python subprocess.Popen 控制台输出 实时监控百度网ping值

    import subprocess file_out = subprocess.Popen('ping www.baidu.com', shell=True, stdout=subprocess.PI ...

  8. 1043. 输出PATest(20)

    1043. 输出PATest(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个长度不超过10000 ...

  9. 带返回结果的批量任务执行 CompletionService

    转自 :http://blog.csdn.net/lmj623565791/article/details/27250059 一般情况下,我们使用Runnable作为基本的任务表示形式,但是Runna ...

  10. Python+自动化测试框架的设计编写

    Python之一个简单的自动化测试框架:https://baijiahao.baidu.com/s?id=1578211870226409536&wfr=spider&for=pc h ...