vuex - 我如何通过在原子设计模式中发出来从 vuetify select 中获取更改的值?

标签 vuex vuetify.js emit v-select atomic-design

我试图通过使用 $emit 获取 vuetify v-select 的更改值,但它不起作用。 我通过应用原子设计模式(原子(子组件,不与商店连接)、有机体(父组件))和 vuex 商店来划分组件。 我认为 $emit 数据没问题,但在此过程之后一切都不起作用。

这是用于管理页面的新应用程序 使用 vue、vuex、vuetify、 原子设计连接到 API 服务器。

组件

子组件 - 在 atoms 文件夹中

<template>
  <v-select
    :items="list"
    :label="label"
    v-model="selected"
    item-value="id"
    item-text="name"
    return-object
    @change="changeSelected"
  ></v-select>
</template>

<script>
export default {
  props: ["list", "label", "defaultSelected"],
  data() {
    return {
      selected: this.defaultSelected
    };
  },
  methods: {
    changeSelected(newValue) {
      console.log(newValue);    // display changed new data
      this.$emit("changeSelected", newValue);
    }
  }
};
</script>

父组件 - 在 organisms 文件夹中

<template>
  <v-select-child
    :select-label="label"
    :select-list="list"
    :default-selected="selected"
    @change-selected="changeSelected"    // problem issue?
  >
  </v-select-child>
</template>
<script>
import { mapState } from "vuex";
export default {
  data() {
    ...
  },
  computed: {
    ...mapState({
      list: state => state.list
    })
  },
  methods: {
    changeSelected() {
      console.log("changeSelected");    // doesn't work
      this.$store.dispatch("setSelected", { payload: this.selected });
    }
  }
};
</script>

vuex 商店

索引.js

export default new Vuex.Store({
  modules: {
    xxx
  },
  state: {
    list: [
      {
        name: "aaaaa",
        id: "001"
      },
      {
        name: "bbbbb",
        id: "002"
      }
    ]
  },
  getters: {},
  mutations: {},
  actions: {}
});

xxx.js

export default {
    selected: { id: "001" }
  },

  getters: {
    //
  },

  mutations: {
    updateSelected(state, payload) {
      console.log("payload");    // doesn't work
      console.log(payload);
      state.selected = payload;
      console.log(state.selected);
    }
  },

  actions: {
    setSelected({ commit }, payload) {
      console.log("Action");    // doesn't work
      commit("updateSelected", payload);
    }
  }
};

它在 changeSelected 函数后不打印任何控制台日志。

最佳答案

document

Unlike components and props, event names don’t provide any automatic case transformation. Instead, the name of an emitted event must exactly match the name used to listen to that event.

这意味着如果您发出类似 $emit('changeSelected') 的事件,那么您需要使用 @changeSelected@change-selected 将不起作用。

 <v-select-child
    :select-label="label"
    :select-list="list"
    :default-selected="selected"
    @changeSelected="changeSelected" 
  >
</v-select-child>

关于vuex - 我如何通过在原子设计模式中发出来从 vuetify select 中获取更改的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56319258/

相关文章:

vue.js - Vuex如何处理api错误通知?

vue.js - 使用数组从响应中获取 Axios 响应数据

css - Vuetify 样式不适用于 Tailwind

node.js - ExpressJS + Socket.IO 路由

map - 为什么发出(meta.id,NULL)

javascript - Axios promise 不会在 vue 方法中抛出错误

javascript - 在 data() 中将 vuex 状态绑定(bind)到这个?

vue.js - 在 Vuetify 中将 Clipped prop 应用于 <v-navigation-bar/> 的正确方法

vue.js - 如何在实例配置中自定义主题?

c# - 复制/反射。发射静态数组