首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过原子设计模式中的发射,从vuetify选择中得到改变的值?

如何通过原子设计模式中的发射,从vuetify选择中得到改变的值?
EN

Stack Overflow用户
提问于 2019-05-27 03:15:36
回答 3查看 1.4K关注 0票数 3

我试图通过使用vuetify v-select获得更改后的$emit值,但它不起作用。我通过应用原子设计模式(原子(子组件而不是与存储连接)、生物体(父组件)和vuex存储来划分组件。我认为$emit数据是可以的,但是在这个过程之后,任何东西都不能工作。

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

组件

子组件- in原子文件夹

代码语言:javascript
复制
<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>

父组件- in有机物文件夹

代码语言:javascript
复制
<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商店

index.js

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

xxx.js

代码语言:javascript
复制
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函数之后打印任何控制台日志。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-27 08:22:55

文档

与组件和道具不同,事件名称不提供任何自动案例转换。相反,发出的事件的名称必须与用于侦听该事件的名称完全匹配。

这意味着如果您发出像$emit('changeSelected')这样的事件,那么您需要使用@changeSelected@change-selected将无法工作。

代码语言:javascript
复制
 <v-select-child
    :select-label="label"
    :select-list="list"
    :default-selected="selected"
    @changeSelected="changeSelected" 
  >
</v-select-child>
票数 1
EN

Stack Overflow用户

发布于 2019-05-28 00:27:12

我找到了以下解决方案:

子组件

代码语言:javascript
复制
<template>
  <v-select
    :label="label"
    :items="list"
    v-model="selected"
    item-value="id"
    item-text="name"
    return-object
  ></v-select>
</template>

<script>
export default {
  props: ["list", "label", "defaultSelected"],
  computed: {
    selected: {
      get() {
        return this.defaultSelected;
      },
      set(newVal) {
        if (this.selected !== newVal) {
          this.$emit("changeSelected", newVal);
        }
      }
    }
  }
};
</script>

父组件

代码语言:javascript
复制
<template>
  <v-select-child
   :label="label"
   :list="list"
   :defaultSelected="selected"
   @changeSelected="changeSelected"  // fix the property using camelCase
  ></v-select-child>
</template>

<script>
import { mapState } from "vuex";
export default {
  data() {
    ...
  },
  computed: {
    ...mapState({
      list: state => state.list
    })
  },
  methods: {
    changeSelected(val) {   // val: changed object value
      this.$store.dispatch("setSelected", { id:val.id });
    }
  }
};
</script>
票数 1
EN

Stack Overflow用户

发布于 2020-10-22 16:56:19

你也可以用手表;

代码语言:javascript
复制
  <v-select
    :label="label"
    :items="list"
    v-model="selected"
    item-value="id"
    item-text="name"
  ></v-select>
</template>

...
watch:{
   selected(){
      this.$emit('changeValue', this.selected.id');
   }
}
...

来自父母;

代码语言:javascript
复制
<child @changeValue="id = $event" .. />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56319258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档