首页 > 其他分享 >VueX和组件传参

VueX和组件传参

时间:2022-10-20 19:24:03浏览次数:56  
标签:传参 登录 bus data api 组件 VueX store

组件的传参

父传子 props
子传父 事件$emit
引用父组件$parent
引用子组件 $children/$refs
引用根组件 $root 最大组件

事件bus传参

(跨层级访问数据)

(非父子关系)

  1. 创建bus.js

    import Vue from 'vue'
    var bus = new Vue();
    export default bus;
    
  2. 在要发送数据的组件中导入bus并使用 bus.$emit

  3. 在有接收数据的组件中导入bus 并使用 bus.$on (注意this)

注意:任意组件只要导入bus 就可以随意的 发送与监听数据

bus.$on(eventname,callback) 监听事件 bus.$emit(eventname,data)发送事件 bus.$off(eventname)移除事件

provider和inject

依赖注入
跨层级访问(只读)

inject 接收父辈组件提供的数据

Vuex全局数据共享

VueX

解释

Vuex 实现数据的全局共享,响应式更新

state

存放状态

$store.state.xxx访问

mutations

改变状态的唯一方法
SET_SCORE(state,data){}

$store.commit("xxx",data)

actions

异步操作数据的方式

  //在actions中访问mutations
  context.commit(“SET_SCORE”,data)
}

$store.dispatch("xxx",data)

getters

从现有的状态计算出新的数据

   return state.user.score/100
}

$store.getters.xxx

module子模块

把登录功能放在store/moudules/user.js actions中

loginView.vue页面执行登录

实现store/modules/user.js 实现注销

实现 登录成功提示,登录失败提示

为什么要把登录转换到vuex中

  1. 登录后成功的数可以全局共享

  2. 为了重复利用登录功能可能不止在登录页面

    1. 首页点击弹框登录

    2. 购物车 跳转前,弹框登录

    3. 登录位置会有很多

      如果写在Vuex只需要在登录地方
      $store.dispatch("login",data) 方法就可以
      

为什么要写api/login.js (定义api呢)

重复利用
登录的api也会调用多次

方便集中管理

所有的请求地址与请求方式 api文件中
改请求方式与参数可以直接修改 api内容就可以,不用具体进入到某个组件

provide提供数据

所有子孙都可以通过inject注入数据

​ # Vue

组件的传参

父传子 props
子传父 事件$emit
引用父组件$parent
引用子组件 $children/$refs
引用根组件 $root 最大组件

事件bus传参

(跨层级访问数据)

(非父子关系)

  1. 创建bus.js

    import Vue from 'vue'
    var bus = new Vue();
    export default bus;
    
  2. 在要发送数据的组件中导入bus并使用 bus.$emit

  3. 在有接收数据的组件中导入bus 并使用 bus.$on (注意this)

注意:任意组件只要导入bus 就可以随意的 发送与监听数据

bus.$on(eventname,callback) 监听事件 bus.$emit(eventname,data)发送事件 bus.$off(eventname)移除事件

provider和inject

依赖注入
跨层级访问(只读)

inject 接收父辈组件提供的数据

Vuex全局数据共享

VueX

解释

Vuex 实现数据的全局共享,响应式更新

state

存放状态

$store.state.xxx访问

mutations

改变状态的唯一方法
SET_SCORE(state,data){}

$store.commit("xxx",data)

actions

异步操作数据的方式

  //在actions中访问mutations
  context.commit(“SET_SCORE”,data)
}

$store.dispatch("xxx",data)

getters

从现有的状态计算出新的数据

   return state.user.score/100
}

$store.getters.xxx

module子模块

把登录功能放在store/moudules/user.js actions中

loginView.vue页面执行登录

实现store/modules/user.js 实现注销

实现 登录成功提示,登录失败提示

为什么要把登录转换到vuex中

  1. 登录后成功的数可以全局共享

  2. 为了重复利用登录功能可能不止在登录页面

    1. 首页点击弹框登录

    2. 购物车 跳转前,弹框登录

    3. 登录位置会有很多

      如果写在Vuex只需要在登录地方
      $store.dispatch("login",data) 方法就可以
      

为什么要写api/login.js (定义api呢)

重复利用
登录的api也会调用多次

方便集中管理

所有的请求地址与请求方式 api文件中
改请求方式与参数可以直接修改 api内容就可以,不用具体进入到某个组件

provide提供数据

所有子孙都可以通过inject注入数据

标签:传参,登录,bus,data,api,组件,VueX,store
From: https://www.cnblogs.com/aureazjl/p/16810957.html

相关文章