Reputation: 170
Im completely new into Vuex and decorators, Im in the middle of making searchbar which filters characters by the user input.
<input
class="form-control"
type="text"
v-model="searchPhrase"
placeholder="Search"
/>
<Character
v-for="character in resultSearching"
:key="character.id"
:photo="character.image"
:characterID="character.id"
:name="character.name"
:gender="character.gender"
:species="character.species"
:lastEpisode="character.episode[character.episode.length - 1].episode"
:character="character"
/>
export default class Characters extends Vue {
// @Getter("characters/getSearchPhrase") searchPhrase!: string;
searchPhrase = '';
get resultSearching(): CharactersApiI[] {
return this.characters.filter((character) => {
return character.name
.toLowerCase()
.match(this.searchPhrase.toLowerCase());
});
}
It works as long as I have searchPhrase defined in component but it breaks up when I try to get it with @Getter('characters/getSearchPhrase') searchPhrase!: string; I tried to make some @Mutation and @Action in my characters.ts module but didn't end successfully
Upvotes: 0
Views: 206
Reputation: 138656
First, ensure your Vuex module is namespaced:
// store/characters.ts
export default {
namespaced: true, 👈
getters: {
getSearchPhrase: state => state.searchPhrase
},
//...
}
// store/index.ts
import Vue from 'vue'
import Vuex from 'vuex'
import characters from './characters'
Vue.use(Vuex)
export default new Vuex.Store({
modules: {
characters
}
})
Then, use the vuex-class
namespace
helper to access the namespaced getter:
import Vue from 'vue'
import { Getter, namespace } from 'vuex-class'
import Component from 'vue-class-component'
const characters = namespace('characters') 👈
@Component
export class MyComp extends Vue {
@characters.Getter('getSearchPhrase') 👈
searchPhrase !: string;
//...
}
Upvotes: 0