Ответ 1
Просто используя ';' вместо '& &' для разделения выражения должно работать для вас:
<a ng-click="navigation.book = book; bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a>
Я хочу использовать ng-click для выполнения нескольких выражений. Я хочу как установить значение на модели, так и вызвать метод из $scope
, например:
<a ng-click="navigation.book = book && bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a>
Где я &&
разделяю два разных выражения, которые я хочу выполнить. Я знаю, что могу просто добавить метод, который выполняет обе функции в контроллере. Должен ли я просто сделать это или есть способ выполнить два выражения непосредственно изнутри ng-click
?
Просто используя ';' вместо '& &' для разделения выражения должно работать для вас:
<a ng-click="navigation.book = book; bookSvc.showBook(book)" href="#{{book.id}}">{{book.title}}</a>
Вы можете написать только выражение в ng-click
.
Директива ngClick позволяет указать пользовательское поведение при щелчке элемента.
Но вы можете написать:
<a ng-click="( (navigation.book = book) && bookSvc.showBook(book))" href="#{{book.id}}">{{book.title}}</a>
В этом случае navigation.book
получает содержимое book
.
Демо Fiddle
Ссылка
У нас есть несколько вариантов для вызова navigation.book = book
Что произойдет, если мы напишем:
ng-click="( bookSvc.showBook(book) && (navigation.book = book))"
В этом случае, если (кажется, что bookSvc
- это сервис) bookSvc.showBook(book)
ничего не возвращает или false
, navigation.book = book
никогда не будет выполняться.
Демо 2 Fiddle
Но если bookSvc.showBook(book)
возвращает true
, вызывается navigation.book = book
.
Демо 3 Fiddle
Я бы рекомендовал поместить всю логику в функцию и просто назначить ей ng-click, чтобы сделать код более простым и элегантным.