Dans la partie précédente de cette série de didacticiels, nous avons vu comment commencer à créer un panier simple avec AngularJS. Nous avons créé un design simple, mais AngularJS n’était pas assez important pour l’appeler application AngularJS. Dans cette partie de la série de didacticiels, nous allons créer une directive AngularJS personnalisée pour implémenter les fonctionnalités requises..
Commençons par cloner le code source du tutoriel précédent de GitHub.
clone de git https://github.com/jay3dec/AngularShoppingCart_Part1.git
Après avoir cloné le code source, accédez au répertoire du projet et installez les dépendances requises..
cd AngularShoppingCart_Part1 npm installer
Une fois les dépendances installées, démarrez le serveur.
noeud serveur.js
Pointez votre navigateur sur http: // localhost: 3000 / et vous devriez avoir l'application en cours d'exécution.
dans le cart.html
page, les éléments et ses options sont répétés. Nous allons donc créer une directive AngularJS à cet effet qui créera des éléments et ses options en fonction des données du back-end. Par souci de simplicité, considérons les éléments suivants dans le panier:
['item': 'Disque dur', 'id': 'HD', 'selected': 0, 'price': ['taille': '200GB', 'price': '2000', ' size ':' 400GB ',' price ':' 4000 ', ' item ':' CPU ',' id ':' CPU ',' selected ': 0,' prices ': [' size ' : 'i3', 'price': '20000', 'size': 'i5', 'price': '25000'], 'item': 'Moniteur', 'id': 'MON' , 'selected': 0, 'price': ['size': '16 \ ", 'price': '3000', 'size': '19 \", 'price': '5000'] , 'item': 'Optical Mouse', 'id': 'MOU', 'selected': 0, 'prices': ['size': 'Optical', 'price': '350', 'taille': 'Avancé', 'prix': '550'], 'article': 'RAM', 'id': 'RM', 'sélectionné': 0, 'prix': ['taille ':' 4GB ',' price ':' 4000 ', ' size ':' 8GB ',' price ':' 8000 '], ' item ':' Clavier USB ',' id ':' KEY ',' selected ': 0,' price ': [' size ':' Standard ',' price ':' 2500 ', ' size ':' Advanced ',' price ':' 4500 '] ]
Ajoutez les données suivantes dans le CartCtrl
.
$ scope.shopData = ['item': 'Disque dur', 'id': 'HD', 'selected': 0, 'price': ['taille': '200GB', 'price': '2000 ', ' taille ':' 400 Go ',' prix ':' 4000 '], ' article ':' CPU ',' id ':' CPU ',' sélectionné ': 0,' prix ': ['taille': 'i3', 'prix': '20000', 'taille': 'i5', 'prix': '25000'], 'item': 'Moniteur', 'id ':' MON ',' selected ': 0,' price ': [' size ': '16 \ ",' price ':' 3000 ', ' size ': '19 \",' price ': '5000'], 'item': 'Souris optique', 'id': 'MOU', 'selected': 0, 'price': ['size': 'Optical', 'price': ' 350 ', ' size ':' Advanced ',' price ':' 550 '], ' item ':' RAM ',' id ':' RM ',' selected ': 0,' price ' : ['size': '4GB', 'price': '4000', 'size': '8GB', 'price': '8000'], 'item': 'Clavier USB', 'id': 'KEY', 'selected': 0, 'price': ['size': 'Standard', 'price': '2500', 'size': 'Advanced', 'price': '4500']];
Retirer le répété .panneau
Code HTML de cart.html
. Nous allons créer le code HTML de manière dynamique à l'aide de ngRepeat et $ scope.shopData
. Ajoutez le code HTML suivant à la première colonne du .rangée
div.
q.item
Comme on le voit dans le code ci-dessus, en utilisant ngRepeat
nous avons itéré shopData
et rendu le code HTML. Enregistrez les modifications ci-dessus et redémarrez le serveur. Actualisez la page pour pouvoir afficher les éléments affichés sur la page..
Ensuite, nous afficherons l'option disponible avec un élément particulier, comme sa taille et son prix (voir les données JSON). Pour cela, nous allons créer notre propre directive AngularJS personnalisée. Les directives AngularJS sont l’une des fonctionnalités les plus puissantes d’AngularJS. Pour des informations détaillées sur les directives AngularJS, reportez-vous à la documentation officielle..
Créons une directive personnalisée appelée liste de contrôle
. Ouvrir cart.js
et créez une nouvelle directive comme indiqué:
.directive ('checkList', function () return restreindre: 'E', template: fonction (elem, attrs) return '\'; )\ \\\ \\\ \\
Cette directive porte le nom liste de contrôle
. La directive liste de contrôle
a deux paramètres, restreindre
et modèle
. Restreindre
définit comment la directive sera appelée. Puisque nous avons défini E, il sera appelé comme nom d'élément, comme suit:
le modèle
champ défini le code HTML qui remplacera le liste de contrôle
directive sur la page. Nous avons utilisé le même code HTML statique que celui que nous avions précédemment. Appelez maintenant la directive liste de contrôle
sur le cart.html
page.
q.item
Enregistrez les modifications ci-dessus et actualisez la page du panier. Vous devriez pouvoir voir les options HTML statiques sur la page du panier..
Faisons en sorte que la directive lise les données de $ scope.shopData
. Tout d'abord, au lieu de répéter les options de la directive, nous utiliserons ngRepeat pour itérer les options. Modifier la directive liste de contrôle
comme indiqué pour le rendre dynamique.
template: fonction (elem, attrs) return '\'\ \\
Comme vous pouvez le voir dans le code ci-dessus, nous attendons la option
être passé à la directive. Donc, à partir de la partie HTML, nous devrons définir un attribut pour la liste de contrôle
directive appelée option
et transmettre les données requises. Ajouter le option
dans cart.html
comme montré:
q.item
Accéder au passé option
à l'intérieur de la directive, nous devrons définir la portée. À l'intérieur de liste de contrôle
directive définir portée
comme montré:
.directive ('checkList', function () return restreindre: 'E', étendue: option: '=', modèle: function (elem, attrs) return '\'; )\ \\
De cette façon, la liste de prix des différents articles de $ scope.shopData
est passé dans la directive. Enregistrez les modifications ci-dessus et redémarrez le serveur. Actualisez la page pour pouvoir afficher la taille et le prix de chaque article sous forme d'options dans la page..
Maintenant, si vous essayez de cliquer sur l’option du bouton radio pour un élément particulier, les deux sont sélectionnés. Afin de nous assurer qu'un élément est sélectionné à la fois, nous allons regrouper les boutons radio. Pour cela, il nous faudra passer un autre prénom
attribut à la directive à partir de la vue HTML. Alors ajoutez un nouveau prénom
attribuer à liste de contrôle
de la vue. Nous allons passer l'article ID
comme le prénom
, depuis son unique à chaque article.
Ajoutez maintenant une autre variable à la portée de la directive pour la rendre accessible dans le modèle de directive..
scope: option: '=', name: '='
À l'intérieur de la directive modèle
HTML, ajoutez le nom saisi en tant que nom du bouton radio qui regrouperait les boutons radio d'éléments particuliers.
Enregistrez les modifications et actualisez la page. Essayez de sélectionner les boutons radio pour un élément particulier et vous ne devriez pouvoir en sélectionner qu'un seul à la fois..
Calculer le total en fonction des options sélectionnées
En fonction des éléments sélectionnés par l'utilisateur, nous devons afficher la somme totale du prix de tous les éléments sélectionnés. Pour cela nous allons créer un
$ scope
fonction appeléetotal
, qui résumera le prix total. Chaque fois qu'un utilisateur sélectionne un élément, nous mettons à jour la variable sélectionnée dans$ scope.shopData
JSON. Ensuite, ce JSON est itéré pour obtenir le prix total des éléments sélectionnés. Voici latotal
une fonction.$ scope.total = function () var t = 0; for (var k dans $ scope.shopData) t + = parseInt ($ scope.shopData [k] .selected); retourne t;À l'heure actuelle, nous affichons une valeur codée en dur de 100 Rs dans la div totale. Au lieu de cela, nous appellerons simplement la fonction totale.
Rs. total()
Enregistrez les modifications et actualisez la page. Si vous essayez de sélectionner les différentes options, le total ne change pas vraiment. C'est parce que la valeur initiale du
choisi
la variable dans le JSON est 0 et n'est pas mise à jour lors de la sélection. Passons donc la valeur sélectionnée de JSON dans la directive et mettons-la à jour lorsque le bouton radio est sélectionné. Modifier la vue HTML pour en inclure une de pluschoisi
attribuer à laliste de contrôle
élément de directive.Ajouter
choisi
au champ d'application de la directive pour y accéder à l'intérieur de la directive.portée: option: '=', nom: '=', sélectionné: '= sélectionné'Nous allons mettre
choisi
au bouton radiongModel
directive et lai.price
aungValue
directif. Par conséquent, chaque fois que le bouton radio est sélectionné, sa valeur est mise à jour danschoisi
attribut du$ scope.shopData
JSON.Enregistrez les modifications ci-dessus et actualisez la page. Essayez de sélectionner les options du bouton radio et, en fonction de la sélection, le
Total
le prix devrait être mis à jour.Conclusion
Dans cette partie de la série de didacticiels, nous avons créé une directive personnalisée que nous avons utilisée dans notre application de panier d'achat simple. Dans la prochaine partie de cette série, nous verrons comment faire en sorte que la div totale soit toujours fixée en haut lors du défilement. Nous allons également implémenter la page de paiement où les articles sélectionnés et les prix seront affichés avec un bouton de retour à la page du panier pour personnaliser la sélection.
Le code source de ce tutoriel est disponible sur GitHub. Faites-nous savoir vos pensées ou des corrections dans les commentaires ci-dessous!