Imprimer
Catégorie : R3.01 - dev. Web côté client (vuejs)
Affichages : 403

Préambule

 

1°/ La barre de navigation

1.1°/ Objectifs et contraintes

 

1.2°/ Mise en place

<template>
  <div>
  // button list, values/colors from props titles.
  </div>
</template>

<script>
export default {
  name: 'NavBar',
  props: { titles: Array }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

 

[ {text: "menu1", color: "color1} , {text: "menu2", color: "color2}, ... ]

 

 

1.3°/ Test

Remarques :

 

2°/ Une liste avec cases à cocher

2.1°/ objectifs et contraintes

 

 

[
  {nom:"dupond", prenom:"jean",age:31},
  {nom:"durand", prenom:"pierre",age:35}
]
jean dupond
pierre durant

 


Rappel javascript : on peut accéder aux champs d'un objet grâce à la notation obj['nom_champ']. Par exemple, si j'ai une variable e contenant le premier objet du tableau d'exemple ci-dessus, alors e['nom'] contient 'dupond'.


2.2°/ Mise en place

  • Créer un composant CheckedList avec dedans :
<template>
  <div>
  </div>
</template>

<script>

export default {
  name: 'CheckedList',
  props: {
    data: Array, // les données sources
    fields: Array, // le tableau contenant le nom des champs
    itemCheck: Boolean, // s'il y a des case à cocher
    checked: Array, // le tableau des cases cochées
    itemButton: Object, // l'objet pour les boutons d'items
    listButton: Object, // l'objet pour le bouton de liste
  },
  data : () => {
    return {
    }
  }
}
</script>

<style scoped>
</style>

 

Modifier la partie <template> pour que :

  • le composant affiche sous forme de liste verticale (à vous de choisir l'apparence : paragraphes, liste à puce, table, ...) les objets de la props data. Pour chaque objet, seuls ses propriétés indiquées dans la props fields doivent être affichées (NB : dans l'ordre d'apparition dans fields).
  • si la props itemCheck vaut true, chaque ligne de la liste doit commencer par une case à cocher. La ième case doit être cochée si checked[i] vaut true.
  • si la props itemButton.show vaut true, chaque ligne doit se terminer par un bouton, dont le contenu est indiqué par itemButton.text
  • si la props listButton.show vaut true, un bouton doit apparaître après la liste, dont le contenu est indiqué par listButton.text

En cas d'interaction utilisateur avec les cases et les boutons :

  • chaque fois que l'état d'une case est changé, le composant doit émettre un événement checked-changed, avec comme valeur l'indice de la case à cocher (c.a.d. celui de la ligne)
  • chaque fois qu'un bouton de fin de ligne est pressé, le composant doit émettre un événement item-button-clicked, avec comme valeur l'indice du bouton (c.a.d. celui de la ligne)
  • chaque fois que le bouton après la liste est pressé, le composant doit émettre un événement list-button-clicked.

 

2.3°/ Tests

  • Modifier VirusesView pour que la liste des virus (filtrée si possible) disponibles à l'achat soit affichée grâce au composant CheckedList :
    • pour chaque virus, une ligne de CheckedList doit afficher son nom et son prix,
    • chaque ligne doit commencer par une case à cocher et se terminer par un bouton,
    • la liste des lignes doit être suivi d'une bouton.
  • Quand l'utilisateur clique sur un bouton de fin de ligne, une boîte de dialogue apparaît (cf. méthode alert() de JS) avec un message indiquant le nom de l'item, le nombre en stock et s'il est en vente.
  • Quand l'utilisateur clique sur le bouton d'après liste, une boîte de dialogue apparaît avec un message indiquant le nom de tous les virus dont la case est cochée.

Remarques :