【问题标题】:How to use ng-click with multiple expressions? [duplicate]如何将 ng-click 与多个表达式一起使用? [复制]
【发布时间】:2013-11-23 17:26:02
【问题描述】:

我想使用 ng-click 来执行多个表达式。我想在模型上设置一个值,并从$scope 调用一个方法,如下所示:

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

我有&amp;&amp; 分隔我想要执行的两个不同的表达式。我知道我可以在控制器中添加一个同时执行这两项操作的方法。我应该这样做,还是有办法直接从ng-click 内部执行两个表达式?

【问题讨论】:

    标签: javascript angularjs angularjs-ng-click


    【解决方案1】:

    只需使用 ';'而不是 '&&' 来分隔表达式应该适合你:

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

    【讨论】:

    • 是的,做到了。我应该意识到这只是代码!
    • 为什么不ng-click="bookSvc.showBook(navigation.book = book)"
    【解决方案2】:

    您只能将表达式写入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) 什么都不返回或falsenavigation.book = book 将永远不会执行。

    演示 2 Fiddle

    但如果bookSvc.showBook(book) 返回true,则将调用navigation.book = book

    演示3 Fiddle

    【讨论】:

    • 不错,不知道这种写法。这只是一个简单的 JavaScript 表达式还是它是如何工作的?
    • @hugoderhungrige 它的 angualrJS(欢迎您 :))
    • 这很有趣,但 Urish 的建议要简单一些。
    • @CorayThan BTW,你也可以写:ng-init = "navigation.book = book。不用担心:)
    【解决方案3】:

    我建议将所有逻辑放在一个函数中,然后将 ng-click 分配给它,以使代码更简单、更优雅。

    【讨论】:

    • 这是一个选项,但我认为这只是一个问题或偏好。
    • 当你把它放在函数中时,你只需要在它里面寻找相关的错误,而不是在两个地方,想知道你是否通过缺少分号或括号而犯了语法错误表达。这将是一个简单而好看的ng-click="bookSvc.showBook(book)"。我同意,尽管这是一个偏好问题。
    • Sergey,唯一一次我会说将所有逻辑放在一个函数中不是一个好主意是,如果该逻辑的一部分非常以“视图”为中心,并且不属于控制器,它不应该对视图了解太多。例如,如果您在模态对话框上单击“确定”按钮,您希望 1) 调用控制器以将数据保存到服务和 2) 关闭对话框。如果通过隐藏表单来关闭对话框,您希望在视图中执行此操作。你同意吗?
    最近更新 更多