2017-10-02 3 views
0

meine vuex wie folgt aussieht:Vuex arbeiten falsch

state: { 
    loadedUsers: [ 
    { id: 10, classId: 1, name: 'X' }, 
    { id: 11, classId: 1, name: 'Y' }, 
    { id: 13, classId: 2, name: 'Z' } 
    ] 
} 
getters: { 
    loadedUsers (state) { 
    return (classId) => { 
     return state.loadedUsers.find((user) => { 
     return user.classId === classId 
     }) 
    } 
    } 
} 

und mein berechnet:

computed: { 
    users() { 
    return this.$store.getters.loadedUsers(1) 
    } 
} 

seine gerade zurückkehrt {id: 10, classId: 1, Name: 'X'}

auch wenn ich wie

this.$store.getters.loadedUsers(this.$route.params.classid) 

die classid erreichte aber gibt

zurück

Was könnte das Problem sein?

Antwort

1

Das ist, weil Array.prototype.find() den Wert des ersten Elements zurückgibt, das übereinstimmt. Sie sollten stattdessen Array.prototype.filter() verwenden. Auch Sie Ihre Funktion/Methodenaufruf durch eine Schicht auspacken kann:

getters: { 
    loadedUsers (state) { 
    return classId => state.loadedUsers.filter((user) => { 
     return user.classId === classId 
    }) 
    } 
} 
+0

seine Arbeit dankt viel .. – mak

+0

aber immer noch leer zurück, weil der Parameter classId - Rückkehr user.classId === 1 - das ist Arbeit aber oben ist das Ergebnis leer – mak

+0

@mak Dann müssen Sie überprüfen, ob 'this. $ route.params.classid' tatsächlich eine Klassen-ID zurückgibt. Und wenn dies der Fall ist, analysieren Sie es in eine Ganzzahl (d. H. Eine Zahl), da Sie einen strikten Vergleich mit '===' durchführen. – Terry