Category: Notes to self

Angular ja URL-parametrit

Askartelin äskettäin pienen Angular-sivustoprojektin parissa. Eräs projektin vaatimuksista oli, että sivustosta pitäisi pystyä näyttämään kaksi erilaista versiota, joista toinen näytetään vain kun käyttäjä saapuu sivulle linkillä, jossa on country=usa -parametri.

Kuten moni varmasti tietää, navigointi sivulta toiselle hoituu routerin navigate()-funktion avulla esim. näin:

this.router.navigate(['/thingsOfInterest']);

Aloitin homman siten, että poimin maa-parametrin ensin talteen URLista, jotta sain latattua käyttäjälle taustalta oikeat datat:

this.activatedRoute.queryParams.subscribe(params => {
      const countryParam = params['country'];
      ...
});

Tämän jälkeen tuuppasin käyttäjän oikeaan suuntaan antamalla navigate-funktioon parametrina queryParams-objektin, joka sisältää URLiin lisättävän parametrin ja sen arvon. Halusin säilyttää parametrin tallessa siltä varalta että käyttäjä sattuisi vaikkapa painamaan refreshiä.

this.router.navigate(['/thingsOfInterest'], { 
    queryParams: { 
        country: countryParam
    }
});

Jos countryParam-muuttujan arvo olisi esim. fr, olisi lopputulemana seuraavanlainen URL:

https://example.com/thingsOfInterest?country=fr

Oletusarvoisesti URL-parametrit kuitenkin hukkuvat seuraavan kerran navigoitaessa johonkin suuntaan, mutta tähän voi vaikuttaa queryParamsHandling-parametrilla. Kun queryParams-objektiin lisätään tämä parametri arvolla merge, kaikki URL-parametrit yhdistetään ja otetaan talteen:

this.router.navigate(['/thingsOfInterest'], {
    queryParams: {
        country: countryParam 
    }, 
    queryParamsHandling: "merge",
});

Joskus navigoitaessa voi kuitenkin mukaan tarttua hankala parametri, josta olisi mukava päästä eroon mahdollisimman pienellä vaivalla. Yksi kätevä tapa tähän on antaa kyseiselle, kiusalliselle parametrille arvoksi null queryParams-objektissa. Näin kyseinen parametri katoaa, mutta muut säilyvät menossa mukana:

this.router.navigate(['/thingsOfInterest'], {
    queryParams: { 
        country: null 
    }, 
    queryParamsHandling: "merge" 
});

Highlighting stuff in Google Forms

Google Forms is a simple, handy tool for creating quizzes and questionnaires. One thing that slightly bugs me with Google Forms, though, is that there are currently no tools available for formatting the text in the quizzes. This makes it a bit difficult to add, fox example, bits of code in the quiz questions and highlight them properly.

However, as this article at GAFE points out, you can use a handy Unicode text converter to convert strings of ASCII text to various styles created with Unicode characters. For bits of code, the converter produces a nice monospaced variant that you can simply copy-paste to Google Forms.