Vuex:如何将变量传递给 getter?
Vuex: How can I pass a variable to a getter?
在 vue 应用程序中,我从 URL 得到一个 elementId
以传递给 vuex getter:
<template>
<p>elementId: {{ elementId }}</p>
<p>loadedElement: {{ loadedElement }}</p>
</template>
<script>
export default {
data() {
return {
elementId: this.$route.params.id,
};
},
computed: {
loadedElement() {
return this.$store.getters.getElementById(this.elementId);
},
},
};
</script>
Getter:
getElementById: (state) => (id) => {
return state.elements.find(ele => ele.id === id)
},
现在页面呈现如下:
但是,当对 elementId
进行硬编码时,它会起作用:
<template>
<p>elementId: {{ elementId }}</p>
<p>loadedElement: {{ loadedElement }}</p>
</template>
<script>
export default {
data() {
return {
elementId: 3,
};
},
computed: {
loadedElement() {
return this.$store.getters.getElementById(this.elementId);
},
},
};
</script>
我不明白我做错了什么,因为从路由中获取 elementId
似乎有效,但它没有传递到 getter 函数中。
我做错了什么?
很可能 this.$route.params.elementId
是一个字符串,但您的元素 ID 是数字。使用 ===
比较字符串和数字将不匹配。
尝试使用 ==
,或将 this.$route.params.elementId
转换为数字:
data() {
return {
elementId: +this.$route.params.id,
};
},
(当然,也许你想做更多的错误检查作为其中的一部分。)
在 vue 应用程序中,我从 URL 得到一个 elementId
以传递给 vuex getter:
<template>
<p>elementId: {{ elementId }}</p>
<p>loadedElement: {{ loadedElement }}</p>
</template>
<script>
export default {
data() {
return {
elementId: this.$route.params.id,
};
},
computed: {
loadedElement() {
return this.$store.getters.getElementById(this.elementId);
},
},
};
</script>
Getter:
getElementById: (state) => (id) => {
return state.elements.find(ele => ele.id === id)
},
现在页面呈现如下:
但是,当对 elementId
进行硬编码时,它会起作用:
<template>
<p>elementId: {{ elementId }}</p>
<p>loadedElement: {{ loadedElement }}</p>
</template>
<script>
export default {
data() {
return {
elementId: 3,
};
},
computed: {
loadedElement() {
return this.$store.getters.getElementById(this.elementId);
},
},
};
</script>
我不明白我做错了什么,因为从路由中获取 elementId
似乎有效,但它没有传递到 getter 函数中。
我做错了什么?
很可能 this.$route.params.elementId
是一个字符串,但您的元素 ID 是数字。使用 ===
比较字符串和数字将不匹配。
尝试使用 ==
,或将 this.$route.params.elementId
转换为数字:
data() {
return {
elementId: +this.$route.params.id,
};
},
(当然,也许你想做更多的错误检查作为其中的一部分。)