¿Cómo usar ng-click con múltiples expresiones?

Quiero usar ng-click para realizar múltiples expresiones. Quiero establecer un valor en un model y llamar un método desde $scope , como este:

 <a ng-click="navigation.book = book && bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a> 

Donde tengo && separando las dos expresiones diferentes que quiero realizar. Sé que podría agregar un método que haga ambas cosas en el controller. ¿Debo hacerlo, o hay una forma de realizar dos expresiones directamente desde adentro ng-click ?

Simplemente usando ';' en lugar de '&&' para separar la expresión debería funcionar para usted:

 <a ng-click="navigation.book = book; bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a> 

Puede escribir solo la expresión en ng-click .

La directiva ngClick le permite especificar el comportamiento personalizado cuando se hace clic en un elemento.

Pero puedes escribir:

 <a ng-click="( (navigation.book = book) && bookSvc.showBook(book))" href="#{{book.id}}">{{book.title}}</a> 

En este caso, navigation.book obtiene el contenido del book .

Demo Fiddle

Referencia

Tenemos varias opciones aquí para invocar navigation.book = book

Qué pasa si escribimos:

 ng-click="( bookSvc.showBook(book) && (navigation.book = book))" 

En este caso, si (parece que bookSvc es un service) bookSvc.showBook(book) no devuelve nada o es false , el navigation.book = book nunca se ejecutará.

Demo 2 Fiddle

Pero si bookSvc.showBook(book) devuelve true , se invocará navigation.book = book .

Demo 3 Fiddle

Yo recomendaría poner toda la lógica en una function y simplemente asignarle un clic ng, para hacer el código más simple y más elegante.