javascript - 在html中使用函数调用 - 坏还是好?

时间:2014-02-15 08:18:21

标签: javascript angularjs coding-style

使用angular会带来许多奇怪的代码风格。例如,我一直认为这个

<button onclick="myFunction()">Click me</button>

我不应该使用的样式,除非我懒惰并想要快速和脏代码。我从未在项目中使用过这种风格,我甚至认为这很糟糕。

现在当我看到棱角分明

这是一个例子:

<div enter="loadMoreTweets()">Roll over to load more tweets</div>

来自那里 http://www.thinkster.io/pick/IgQdYAAt9V/angularjs-directives-talking-to-controllers

这是教程的好风格。我不懂。那么这意味着早期的onclick示例也非常好吗?那么为什么没有人使用它至少这些天人们使用大量的jquery呢?

2 个答案:

答案 0 :(得分:5)

让我引用布拉德格林和他的一本书Angular。 Shyam Seshardi

第2章......关于不引人注目的JavaScript的几句话

  

不引人注目的JavaScript的想法已经被解释了许多方面,但理由   对于这种编码风格,有以下几点:

     
      
  1. 不是每个人的浏览器都支持JavaScript。让每个人都能看到您的所有内容并使用您的应用,而无需执行代码   浏览器。
  2.   
  3. 有些人使用不同的浏览器。视力受损的人使用屏幕阅读器和一些手机用户无法使用   使用JavaScript的网站。
  4.   
  5. Javascript在不同平台上的工作方式不同。 IE通常是这里的罪魁祸首。您需要进行不同的事件处理   代码取决于浏览器。
  6.   
  7. 这些事件处理程序引用全局命名空间中的函数。当您尝试集成其他库时,它会让您头疼   具有相同名称的功能。
  8.   
  9. 这些事件处理程序结合了结构和行为。这使您的代码更难以维护,扩展和理解。
  10.         

    在大多数情况下,当你用这种风格编写JavaScript时,生活会更好。   然而,有一件事并不是更好,那就是代码复杂性和   可读性。而不是使用。声明事件处理程序操作   他们行动的元素,你通常不得不为这些元素分配ID,   获取对元素的引用,并设置事件处理程序   回调...

         

    ...

         

    在Angular,我们决定重新检查这个问题。

         

    自这些概念诞生以来世界发生了变化 ......

         

    ...对于大多数内联事件处理程序 Angular具有等效形式   ng-eventhandler =“expression”其中eventhandler将替换为   点击,mousedown,更改,等等。如果你想在什么时候得到通知   用户单击元素,只需使用ng-click指令即可   像这样:

    <div ng-click="doSomething()">...</div>
    
         

    你的大脑是否说“不,不,不!坏,坏,坏!“?好消息是   你可以放松一下。

         

    这些指令与它们的事件处理程序前辈不同   它们:

         
        
    • 在每个浏览器中都表现相同。 Angular为您处理差异。
    •   
    • 无法对全局命名空间进行操作。您指定的表达式可以
    •   

要了解更多详情,请阅读以下书籍:http://www.amazon.com/AngularJS-Brad-Green/dp/1449344852

EXTEND

在评论中讨论之后,我想补充一点解释。

如上所述:Wikipedia - AngularJS

Angular是一个框架,其目标是使用模型 - 视图 - 控制器 (MVC) 功能来增强基于浏览器的应用程序努力使开发和测试更容易

Model–view–controller,来自维基百科的简短摘录:

  • 控制器可以向模型发送命令以更新模型的状态(例如,编辑文档)。它还可以将命令发送到其关联的视图,以更改视图的模型表示(例如,通过滚动文档)。
  • 模型在其状态发生变化时通知其关联的视图和控制器。此通知允许视图更新其显示,并允许控制器更改可用的命令集。在某些情况下,MVC实现可能是“被动的”,因此其他组件必须轮询模型以获取更新而不是通知。
  • 控制器告知视图向用户生成输出表示所需的所有信息。 它还可以提供通用机制来通知控制器用户输入。

摘要:

这里最重要的部分是 View可以将Controllers操作发布给用户。这正是HTML中的函数调用所代表的内容。

答案 1 :(得分:1)

这是一个误解:

  

使用angular会带来许多奇怪的代码风格。例如,我一直认为这个

     

<button onclick="myFunction()">Click me</button>

     

我不应该使用的样式,除非我懒惰并想要快速和脏代码。我从未在项目中使用过这种风格,我甚至认为这很糟糕。

如果您可以在渲染HTML代码时决定要附加到按钮的事件处理程序,那么使用该样式的代码是完全有效的。使用jQuery,我们看到许多动态附加的事件处理程序,因为很多时候元素本身是动态插入的,或者是否附加事件监听器或附加什么是动态决定的。