文档章节

vue 组件间传值(个人精编)

MrBoyce
 MrBoyce
发布于 2018/12/11 20:35
字数 713
阅读 6
收藏 0

1.父组件向子组件传值

1⃣️.子组件标签绑定需要传递的参数名

2⃣️.子组件页面使用props 接收参数 

2.子组件向父组件传值
 

 1⃣️.子组件使用$emit来触发一个自定义事件,并传递一个参数 

 2⃣️.父组件中的子标签中监听该自定义事件并添加一个响应该事件的处理方法

3.非父子组件进行传值 要定义个公共的公共实例文件bus.js,作为中间仓库来传值,不然路由组件之间达不到传值的效果。

   总线/观察者模式

公共bus.js 

//bus.js import Vue from 'vue' 

export default new Vue() 

组件A: 
<template> 
  <div> A组件: <span>{{elementValue}}</span> <input type="button" value="点击触发" @click="elementByValue">
   </div> 
</template> 
<script> // 引入公共的bug,来做为中间传达的工具
 import Bus from './bus.js' 
export default { 
    data () { 
       return { elementValue: 4 } },
       methods: { 
         elementByValue: function () { 
            Bus.$emit('val', this.elementValue) } 
} } 
</script> 
组件B:
 <template>
   <div> B组件: <input type="button" value="点击触发" @click="getData"> 
    <span>{{name}}</span> 
   </div> 
</template> 
<script> 
  import Bus from './bus.js' 
   export default { 
      data () { 
        return { name: 0 } 
      }, 
      mounted: function () { 
            var vm = this // 用$on事件来接收参数 
            Bus.$on('val', (data) => {
               console.log(data) vm.name = data }) 
      }, 
      methods: { 
           getData: function () { this.name++ }
      }
    } 
</script>


4.页面跳转传值

方式1:query传值在router-link标签内to的后面直接加 

方式2:params传值:在router-link中加

5.vuex 全局管理状态

import Vue from 'vue'
 import Vuex from 'vuex'
 // 首先声明一个状态 state
 const state = {
    msg: ''
 }
 // 然后给 actions 注册一个事件处理函数,当这个函数被触发时,将状态提交到 mutaions中处理
 const actions = {
    saveName({commit}, msg) {
        commit('saveMsg', msg)    // 提交到mutations中处理    
    }
 }
 // 更新状态
 const mutations = {
     saveMsg(state, msg) {
        state.msg = msg;
    }
 }
 // 获取状态信息
 const getter = {
    showState(state) {
        console.log(state.msg)
    }
 }


 // 下面这个相当关键了,所有模块,记住是所有,注册才能使用
 export default new Vuex.Store({
    state,
    getter,
    mutations,
    actions
 })
步骤2:在子组件中使用(保存输入)

具体到我这里,是在c-form中使用它:

<template>
    <div>
        <input type="text" @blur=saveName(username) v-model="username" placeholder="Your name">
    </div>
</template>

<script type="text/javascript">
  // 引入mapActions,很重要
  import { mapActions } from 'vuex'
  export default {
    data() {
      return {
        username:'',
        password: ''
      }
    },
    methods: {
      ...mapActions({
        // 在input 的blur 事件中触发回调,并将输入值作为参数返回到store中
        saveName: 'saveName' 
      })
    }
  }
</script>
步骤3:获取在步骤2 中的输入值(获取state)

<template>
  <div id="login">
    <c-header></c-header>
    <c-form></c-form>
    <p class="content-block"><a href="javascript:;" @click=showState class="button button-fill button-success">登录</a></p>
  </div>
</template>

<script>
// 引入mapGtters,很重要
import { mapGetters } from 'vuex'
  export default {
    methods: {
      ...mapGetters([
        // 在store.js 中注册的getters
        'showState'
      ])
    },
    components: {
      "c-form": require('../components/form.vue'),
      "c-header": require('../components/header.vue')
    }
  }
</script>

6.localstorage

© 著作权归作者所有

共有 人打赏支持
上一篇: js 闭包
下一篇: mvvm 原理
MrBoyce
粉丝 1
博文 78
码字总数 30654
作品 0
成都
程序员
私信 提问
Vue笔记(9) - 发布订阅模式

在这里我们记录了如何实现父子组件间的传值。 如果要在非父子组件间传值呢?我们就要用到发布订阅模式(也叫bus或总线)。 在Vue的原型上定义一个变量bus,所有所有Vue的实例或组件都将共享这...

神奇的小卷毛
2018/04/23
0
0
vue中使用中央事件总线bus

vue中父组件向子组件传值使用props,非父子组件间传值时可以使用事件总线,或者使用vuex,来看下事件总线的例子。 上代码,如下: 1、vue-bus.js List-1 vue-bus.js 之后在main.js中引入vue-b...

克虏伯
2018/11/25
0
0
vue非父子组件之间的传值--bus(总线/观察者模式)

vue中父子组件的传值很简单,父组件向子组件传值通过属性的方式 <div id="app"> <hello :content="content"></hello> </div> <script type="text/javascript"> /vue父组件通过属性向子组件传......

成功需要积累
2018/05/29
0
0
学了这么久,vue和微信小程序到底有什么样的区别?

前言 写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别。相比之下,小程序的钩子函数要简单得多。 写了vue项目和小程序,发现二者有许多相同之处,在此想总结...

codeGoogle
2018/08/10
0
0
前端框架Vue(8)——子父组件的传参通信

父子间的通信传值是 vue 中的一个重要的内容和掌握点。 *vue2.0 推荐使用 vuex,全局进行状态管理。(后面再讲) 首先讲一下遇到的 需求背景: 解释一下: 组件之间的关系: 1、子组件 login ...

docallen
2017/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部