De meeste dingen zijn erg makkelijk (en snel) te doen in Vue, maar deze wil me niet lukken. Misschien heeft iemand hier een idee over hoe ik dit het beste op de Vue-manier kan oplossen. Zie onderstaande code voorbeeld:
Hier haal laat ik de books zien van de eerste shelf in shelfs. Alleen wil ik graag de books laten zien waar shelf.selected === true.
Door de Vue filterBy optie te gebruiken kom ik er niet; dat heeft alleen effect op de uiteindelijke set boeken. Een functie die selected shelf returned heb ik ook al geprobeerd, maar dat vind de v-for statement van Vue weer niet leuk. Wat nu?
JSFiddle: https://jsfiddle.net/vty2a63c/
--- Edit ---
Op dit moment heb ik het zo opgelost:
JSFiddle: https://jsfiddle.net/vty2a63c/1/
Dit gaat in ieder geval goed bij het ophalen van de data in eerste instantie. Nu even kijken wat dit doet met de two-way binding.
--- Edit 2 ---
Bovenstaande gaat overigens alleen goed als de debug mode uit staat. Ik krijg deze foutmelding: Error when evaluating expression "shelfs.find(isSelected).books.
Mensen die niks met Vue hebben, maar wel met Javascript zijn overigens ook van harte welkom
HTML:
1
2
3
4
5
6
7
| <div id="app"> <ul> <li v-for="book in shelfs[0].books"> {{ book.title }} </li> </ul> </div> |
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| var app = new Vue({ el: '#app', data: { shelfs: [ { selected: true, books: [ { title: 'Lorem ipum' }, { title: 'Dolor sit amet' } ] }, { selected: false, books: [ { title: 'Ipsum lorem' }, { title: 'Amet sit dolor' } ] } ] } }); |
Hier haal laat ik de books zien van de eerste shelf in shelfs. Alleen wil ik graag de books laten zien waar shelf.selected === true.
Door de Vue filterBy optie te gebruiken kom ik er niet; dat heeft alleen effect op de uiteindelijke set boeken. Een functie die selected shelf returned heb ik ook al geprobeerd, maar dat vind de v-for statement van Vue weer niet leuk. Wat nu?
JSFiddle: https://jsfiddle.net/vty2a63c/
--- Edit ---
Op dit moment heb ik het zo opgelost:
HTML:
1
2
3
4
5
6
7
| <div id="app"> <ul> <li v-for="book in shelfs.find(isSelected).books"> {{ book.title }} </li> </ul> </div> |
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| var app = new Vue({ el: '#app', data: { shelfs: [ { selected: true, books: [ { title: 'Lorem ipum' }, { title: 'Dolor sit amet' } ] }, { selected: false, books: [ { title: 'Ipsum lorem' }, { title: 'Amet sit dolor' } ] } ] }, methods: { isSelected: function(element, index, array) { return element.selected; } } }); |
JSFiddle: https://jsfiddle.net/vty2a63c/1/
Dit gaat in ieder geval goed bij het ophalen van de data in eerste instantie. Nu even kijken wat dit doet met de two-way binding.
--- Edit 2 ---
Bovenstaande gaat overigens alleen goed als de debug mode uit staat. Ik krijg deze foutmelding: Error when evaluating expression "shelfs.find(isSelected).books.
Mensen die niks met Vue hebben, maar wel met Javascript zijn overigens ook van harte welkom
[ Voor 33% gewijzigd door TheNephilim op 04-02-2016 10:56 ]