web-dev-qa-db-fra.com

Comment utiliser ng-click avec plusieurs expressions?

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?

58
CorayThan

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>
130
urish

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

11
Maxim Shoustin

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.

4
Sergei Basharov