如何在ng-click中使用多个表达式?
如何在ng-click中使用多个表达式?
我想使用ng-click执行多个表达式。我想要在一个模型上设置一个值,并从$scope中调用一个方法,就像这样:\n
{{book.title}}
\n我在这两个不同的表达式之间使用了&&。我知道我可以在控制器中添加一个同时执行这两个操作的方法。我应该这样做,还是有办法直接在ng-click内执行两个表达式?
问题的出现原因是ng-click指令在使用多个表达式时可能会导致代码复杂和不够优雅。解决方法是将所有逻辑放在一个函数中,并将ng-click指令赋值给该函数。这样做的好处是,只需要查看函数内部即可找到相关的错误,而不需要在两个地方查找,以确定是否因为在表达式中缺少分号或括号而导致语法错误。最终的ng-click指令将变得简单且易于阅读:ng-click="bookSvc.showBook(book)"
。然而,这只是一种个人偏好的问题。
Sergey提到,将所有逻辑放在一个函数中的做法不适用于某些情况。如果逻辑的一部分与"视图"相关,并且不应该出现在控制器中,那么将所有逻辑放在一个函数中就不是一个好主意。例如,如果在模态对话框的"确定"按钮上有一个ng-click指令,你希望同时执行以下两个操作:1)调用控制器将数据保存到服务中;2)关闭对话框。如果关闭对话框是通过隐藏表单来实现的,你希望在视图中完成这个操作。你同意这种观点吗?
文章中的代码:ng-click="bookSvc.showBook(book)"
。
如何使用ng-click与多个表达式?
在ng-click中,你只能写入一个表达式。
但是你可以写入如下的代码:
{{book.title}}
在这种情况下,navigation.book将获取book的内容。
参考
我们有几个选项来调用navigation.book = book。
如果我们写入如下的代码:
ng-click="( bookSvc.showBook(book) && (navigation.book = book))"
在这种情况下,如果(似乎bookSvc是一个服务),bookSvc.showBook(book)返回空或false,navigation.book = book将永远不会执行。
但是如果bookSvc.showBook(book)返回true,navigation.book = book将被调用。
这是挺有趣的,但是Urish的建议要简单得多。
顺便说一下,你也可以写成:
ng-init="navigation.book = book"
没问题的 🙂
这是非常有趣的,但是这只是一个简单的JavaScript表达式,或者它是如何工作的?
这是AngularJS(不客气)。
原因:ng-click指令用于在AngularJS中绑定元素的点击事件。当需要在一个ng-click表达式中使用多个表达式时,通常使用分号“;”来分隔它们。然而,上述代码中使用的是“&&”,这是一个错误的语法,导致ng-click无法正常工作。
解决方法:将表达式用分号“;”分隔开来即可正常工作。具体代码如下:
{{book.title}}
这样做可以成功将两个表达式分开,使ng-click指令能够正确执行。
同时,可能会有人提出另一种解决方法:ng-click="bookSvc.showBook(navigation.book = book)"
。这种写法是错误的,因为它会将表达式放在一个函数调用中,而不是将两个表达式分开。因此,正确的解决方法是使用分号“;”分隔开两个表达式。