如何在ng-click中使用多个表达式?

10 浏览
0 Comments

如何在ng-click中使用多个表达式?

我想使用ng-click执行多个表达式。我想要在一个模型上设置一个值,并从$scope中调用一个方法,就像这样:\n

{{book.title}}

\n我在这两个不同的表达式之间使用了&&。我知道我可以在控制器中添加一个同时执行这两个操作的方法。我应该这样做,还是有办法直接在ng-click内执行两个表达式?

0
0 Comments

问题的出现原因是ng-click指令在使用多个表达式时可能会导致代码复杂和不够优雅。解决方法是将所有逻辑放在一个函数中,并将ng-click指令赋值给该函数。这样做的好处是,只需要查看函数内部即可找到相关的错误,而不需要在两个地方查找,以确定是否因为在表达式中缺少分号或括号而导致语法错误。最终的ng-click指令将变得简单且易于阅读:ng-click="bookSvc.showBook(book)"。然而,这只是一种个人偏好的问题。

Sergey提到,将所有逻辑放在一个函数中的做法不适用于某些情况。如果逻辑的一部分与"视图"相关,并且不应该出现在控制器中,那么将所有逻辑放在一个函数中就不是一个好主意。例如,如果在模态对话框的"确定"按钮上有一个ng-click指令,你希望同时执行以下两个操作:1)调用控制器将数据保存到服务中;2)关闭对话框。如果关闭对话框是通过隐藏表单来实现的,你希望在视图中完成这个操作。你同意这种观点吗?

文章中的代码:ng-click="bookSvc.showBook(book)"

0
0 Comments

如何使用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(不客气)。

0
0 Comments

原因:ng-click指令用于在AngularJS中绑定元素的点击事件。当需要在一个ng-click表达式中使用多个表达式时,通常使用分号“;”来分隔它们。然而,上述代码中使用的是“&&”,这是一个错误的语法,导致ng-click无法正常工作。

解决方法:将表达式用分号“;”分隔开来即可正常工作。具体代码如下:

{{book.title}}

这样做可以成功将两个表达式分开,使ng-click指令能够正确执行。

同时,可能会有人提出另一种解决方法:ng-click="bookSvc.showBook(navigation.book = book)"。这种写法是错误的,因为它会将表达式放在一个函数调用中,而不是将两个表达式分开。因此,正确的解决方法是使用分号“;”分隔开两个表达式。

0