昨天创建完项目以后,今日首先使用项目来做一个简单的导航栏体会一下Vue的使用

1.项目的结构:

2.首先在Vheader.Vue中编辑代码:

  1. <template>
  2. <header class="header">
  3. <div class="nav">
  4. <div class="logo">
  5. <img :src="imgSrc" alt="">
  6. </div>
  7. <div class="info">
  8. <button>登录</button>
  9. <button>注册</button>
  10. </div>
  11. </div>
  12. </header>
  13. </template>
  14.  
  15. <script>
  16. import imgSrc from "../assets/logo.png"
  17. export default {
  18. name: 'Vheader',
  19. data() {
  20. return {
  21. imgSrc:imgSrc,
  22. }
  23. }
  24. }
  25. </script>
  26.  
  27. <style scoped>
  28. .header {
  29. width: 100%;
  30. height: 70px;
  31. background-color: #fff;
  32. box-shadow: 0 2px 4px 0 #c9c9c9;
  33. }
  34. .header .nav{
  35. width: 980px;
  36. height: 40px;
  37. margin: 0 auto;
  38. /*float: left;*/
  39. background-color: transparent;
  40. }
  41. .nav .logo{
  42. width: 100px;
  43. height: 40px;
  44. float: left;
  45. }
  46. .logo img{
  47. width: 40px;
  48. height: 40px;
  49. }
  50. .nav .info{
  51. float: right;
  52. width: 200px;
  53. height: 40px;
  54. }
  55. .info button{
  56. width: 80px;
  57. height: 40px;
  58. float: left;
  59. }
  60. </style>

3.App.vue主文件进行调用组件:

  1. <!-- 一个组件由三部分组成 -->
  2. <template>
  3. <!-- 页面的结构 -->
  4. <div class="app">
  5. <Vheader class="header">
  6.  
  7. </Vheader>
  8. <Vcontent></Vcontent>
  9. <Vfooter></Vfooter>
  10.  
  11. <h3>{{currentMsg}}</h3>
  12. <img :src="imgSrc" alt="">
  13.  
  14. <ul>
  15. <li v-for="item in getArray">
  16. <a href="javascript">{{item}}</a>
  17. </li>
  18. </ul>
  19. <button @click="clickHandler">修改</button>
  20.  
  21. </div>
  22. </template>
  23.  
  24. <script>
  25. //1.先引入组件
  26. //file-loader
  27. import imgSrc from './assets/logo.png'
  28. import Vheader from './components/Vheader.vue'
  29. import Vfooter from './components/Vcontent.vue'
  30. import Vcontent from './components/Vfooter.vue'
  31. //页面的业务逻辑
  32. export default {
  33. name: 'app',
  34. data() { //data必须是一个函数
  35. return { //必须return。
  36. msg: "hello S9!",
  37. starts: [
  38. "邓超", "郑凯", "陈赫"
  39. ],
  40. imgSrc: imgSrc, //将图片当成一个模块,引入成为对象。
  41. }
  42. },
  43. methods: {
  44. clickHandler() {
  45. //这里跟msg紧密相关,一旦刷新页面会打印1,点击按钮msg发生
  46. //了变化,那么这个1又打印1遍
  47. console.log(1);
  48. this.msg = "哈哈哈"
  49. this.starts.push("baby")
  50. }
  51.  
  52. },
  53. computed: {
  54. currentMsg() {
  55. return this.msg
  56. },
  57. getArray() {
  58. return this.starts
  59. }
  60.  
  61. },
  62. //2.挂载
  63. components: {
  64. Vheader: Vheader,
  65. Vcontent: Vcontent,
  66. Vfooter: Vfooter,
  67. }
  68. }
  69. </script>
  70.  
  71. <style scoped>
  72. *{
  73. padding: 0;
  74. margin: 0;
  75. }
  76. </style>

最后就是整个流程的图。

下面就来说说怎么具体进行父子传值。

比如有这么一个场景,所有的数据肯定都是在app.vue中的,那么子组件怎么去拿到这个数据呢?

在app.vue这里有一个这个citys的数据,想要渲染在Vfooter中,怎么传过去呢?

  1. <!--绑定自定义属性-->
  2. <Vfooter :cityArray='citys' ></Vfooter>

然后切到Vfooter.vue中

  1. <script>
  2. export default {
  3. name:'Vfooter',
  4. data(){
  5. return{
  6.  
  7. }
  8. },
  9. //父子传值利用props验证
  10. props:{
  11. cityArray:Array
  12. }
  13. }
  14. </script>

首先对数据进行验证,然后在标签中渲染出来。

  1. <template>
  2. <footer>
  3. <ul v-for='item in cityArray'>
  4. {{item}}
  5. </ul>
  6. </footer>
  7. </template>

到此数据传送完毕。

第二个就是父子触发事件的问题

比如在Vcontent中有一个button,点击button想要添加一个城市。如何去添加呢?

1.

在Vcontent.vue标签下绑定了点击事件。

  1. <button @click="addCunHandler">添加村庄</button>

完了再下面的方法中写这个事件:

  1. methods:{
  2. addCunHandler(){
  3. //触发自定义的事件
  4. this.$emit('addZhuangHandler','通州' )
  5. }
  6. }

这里触发的自定制事件是添加村庄,需要触发app.vue中的事件,而且需要把点击传递的参数(也就是要添加的村庄)传入。

最后在app.vue中:

  1. <!--自定义事件-->
  2. <Vcontent v-on:addZhuangHandler="addHandler"></Vcontent>

子组件传过来触发了这个事件。

  1. methods: {
  2. clickHandler() {
  3. //这里跟msg紧密相关,一旦刷新页面会打印1,点击按钮msg发生
  4. //了变化,那么这个1又打印1遍
  5. console.log(1);
  6. this.msg = "哈哈哈";
  7. this.starts.push("baby")
  8. },
  9. addHandler(str){
  10. alert(str);
  11. this.citys.push(str)
  12. }
  13.  
  14. },

这个事件执行,弹框并且把传过来的值(通州)添加到这个数组中。

这个东西很重要!

总结一句话就是父级往子级传值 使用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. 集合抽象数据类型的C语言实现

    链表是实现集合的一种理想的方式.将List以typedef的方式重命名为Set.这样做能保留链表简洁的特性,还能使集合具有了一些多态的特性. 使用这种方法的最大好处就是可以使用list_next来遍历 ...

  2. Git&GitHub

    Git是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.  Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软 ...

  3. JavaScript -- 时光流逝(二):js中数组的方法

    JavaScript -- 知识点回顾篇(二):js中数组的方法 1. 数组 (1)定义数组,数组赋值 <script type="text/javascript"> ...

  4. 【转载】ubuntu下/usr/bin和/usr/local/bin的区别

    这篇文章已经无法考证是谁原创的了 首先注意usr 指 Unix System Resource,而不是User 然后通常: /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变. /u ...

  5. C++借助curses库实现俄罗斯方块

    主要要实现如下几个功能:方块的移动控制.方块变形.判定方块是否接触边界和进行方块堆积.对方块进行消除. 1.方块的移动控制上下左右四个方向上-->变形,下-->加速下落,左-->向左 ...

  6. SAP LOGON 快捷登陆方式如何保存密码

    默认情况下,快捷方式密码是不能输入的. 解决方法:修改注册表: 计算机\HKEY_CURRENT_USER\Software\SAP\SAPShortcut\Security EnablePasswo ...

  7. 【算法】LeetCode算法题-Roman To Integer

    这是悦乐书的第145次更新,第147篇原创 今天这道题和罗马数字有关,罗马数字也是可以表示整数的,如"I"表示数字1,"IV"表示数字4,下面这道题目就和罗马数 ...

  8. 【车】汽车X40保养

    参考文档: [养车成本]小保养331元,奔腾X40养车成本调查

  9. 【存储】RAID磁盘阵列选择

    RAID磁盘阵列(Redundant Arrays of Inexpensive Disks) 一个基本思想:将多个容量较小.相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量 ...

  10. 设计模式C++实现——装饰者模式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/walkerkalr/article/details/28633123 模式定义:         装 ...