Logboek - RoyCsuka/frontend-applications GitHub Wiki
Hieronder kun je mijn proces volgen. Welke stappen ik heb gezet en hoe ik tot het resultaat ben gekomen. Ook kun je lezen dat sommige dingen niet gelukt zijn omdat ik Vue nog niet heel goed beheers.
Eerst heb ik twee componenten aangemaakt "TheData.vue" en "HelloWorld.vue".
Vervolgens heb ik de data uit de database (SPARQL) proberen te halen via het hulp bestand door gewoon een aantal stukken code te kopiëren en te plakken (Met hulp van mijn studiegenoten). Hieronder is de code te zien die een array aan titels m.b.t. maskers laat zien in de console.
export default {
components: {
HelloWorld
},
data () {
return {
title: "Maskers van Toen",
results: []
}
},
// FETCH THE DATA
mounted () {
const url = "https://api.data.netwerkdigitaalerfgoed.nl/datasets/ivo/NMVW/services/NMVW-14/sparql"
//Note that the query is wrapped in es6 template strings to allow for easy copy pasting
const query = `
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX dct: <http://purl.org/dc/terms/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX edm: <http://www.europeana.eu/schemas/edm/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT * WHERE {
?cho dc:title ?title .
OPTIONAL { ?cho dc:description ?desc .}
FILTER (CONTAINS (?title, "maskers") OR
CONTAINS (?title, "mask")
)
} LIMIT 50
`
this.runQuery(url, query)
},
methods :{
runQuery(url, query) {
fetch(url)
fetch(url+"?query="+ encodeURIComponent(query) +"&format=json")
.then(res => res.json())
.then(json => {
this.results = json.results.bindings;
var results = this.results;
})
}
}
}
Nu de titels worden uit SPARQL worden gehaald en deze in de console te zien zijn ga ik als eerst de titels proberen te tonen op mijn home pagina.
Om de data te kunnen tonen via Vue heb ik de regel code hieronder toegevoegd. Door wat te google'en heb ik gevonden en begrepen hoe je data te kan tonen in je app via deze website. Er wordt ook een for loop uitgevoerd door de data in de
v-for="item in results"
.
<li v-for="item in results">
{{ item.title.value }}
</li>
Om de afbeeldingen als achtergrond afbeelding in te laden heb ik in SPARQL dit stukje code toegevoegd: ?cho edm:isShownBy ?img .
en om het te laten werken in Vue heb ik dit gevonden om het te laten werken: https://stackoverflow.com/questions/35242272/vue-js-data-bind-style-backgroundimage-not-working
Herfstvakantie.
De data is opgehaald en nu is het tijd voor wat CSS en HTML. Omdat ik het fijn vindt om in scss te werken heb ik een stukje code toegevoegd in de main.js file import './style.scss'
wat het mogelijk maakt om met scss te werken.
Om te begrijpen hoe je functies verwerkt in Vuejs, heb ik gewerkt aan een simpele "add class on-click" functie die ik hier gevonden heb: https://stackoverflow.com/questions/42971081/use-arrow-function-in-vue-computed-does-not-work. Deze functie heb ik toegepast op de home page knop: "bekijk de collage". Met deze functie wil ik zorgen dat je naar beneden scrollt.
De volgende functie die ik heb toegevoegd is als er gescrollt wordt dat er een class wordt toegevoegd aan een container zodat ik de titel kan verplaatsen en ander soort content kan tonen.
- Toen dit gelukt was heb ik naar infinite scrolling gekeken en door deze tutorial te volgen maar kwam tot geen resultaat. Het probleem lag hem bij mij dat ik deze code niet goed begrijp. https://alligator.io/vuejs/implementing-infinite-scroll/.
- Infinite scrolling heb ik ook geprobeerd via deze tutorial: https://medium.com/@fayazara/easiest-way-to-implement-infinite-scroll-in-vue-js-54a0a6c1111. Hier wordt het gedaan via een plug-in.
Na een mislukte poging voor infinite scrolling ben ik mij gaan focussen op het sorteren van mijn resultaten. Voor deze optie heb ik de onderstaande tutorials / oplossingen gevolgd:
-
https://laracasts.com/discuss/channels/vue/proper-way-of-sorting-list-in-v-for
- Geprobeerd maar kreeg het voor elkaar tot in de console. Vanaf hier wist ik niet hoe ik elementen moest manipuleren.
-
https://jsfiddle.net/Akryum/bLccmg79/
- Hier is het ook niet gelukt omdat ik simpel weg de complete samenwerking van code weer niet begreep.
- Hulp gevraagd en op deze links gekomen: https://stackoverflow.com/questions/6712034/sort-array-by-firstname-alphabetically-in-javascript
In combinatie met sorteren wil ik ook dat er een class wordt getoggled op het element (om visueel te laten zien wat er gebeurt). De link hieronder heeft mij verder geholpen om twee functies in een click te verwerken. Link is gevonden door Coen en ik heb zelf de code zo toegepast en omschreven dat het voor mijn applicatie werkt.