Je veux utiliser ng-click pour effectuer plusieurs expressions. Je veux à la fois définir une valeur sur un modèle et appeler une méthode à partir du $scope
, comme ça:
<a ng-click="navigation.book = book && bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a>
Où j'ai &&
séparant les deux expressions différentes que je veux effectuer. Je sais que je pourrais simplement ajouter une méthode qui fait les deux choses dans le contrôleur. Devrais-je simplement faire cela, ou existe-t-il un moyen d’exécuter deux expressions directement de l’intérieur ng-click
?
En utilisant simplement ';' au lieu de '&&' pour séparer l'expression devrait fonctionner pour vous:
<a ng-click="navigation.book = book; bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a>
Vous ne pouvez écrire que l'expression dans ng-click
.
La directive ngClick vous permet de spécifier un comportement personnalisé lorsqu'un élément est cliqué.
Mais vous pouvez écrire:
<a ng-click="( (navigation.book = book) && bookSvc.showBook(book))" href="#{{book.id}}">{{book.title}}</a>
Dans ce cas, navigation.book
Obtient le contenu book
.
Démo Fiddle
Référence
Nous avons plusieurs options ici pour invoquer navigation.book = book
Que se passera-t-il si nous écrirons:
ng-click="( bookSvc.showBook(book) && (navigation.book = book))"
Dans ce cas, si (il semble que bookSvc
soit un service) bookSvc.showBook(book)
ne renvoie rien ou false
, le navigation.book = book
Ne sera jamais exécuté.
Démo 2 Fiddle
Mais si bookSvc.showBook(book)
renvoie true
, le navigation.book = book
Sera invoqué.
Démo 3 Fiddle
Je recommanderais de mettre toute la logique dans une fonction et de lui assigner ng-click, pour rendre le code plus simple et plus élégant.