也许这不是问这个问题的好地方,但我会尽力使它尽可能客观和负责任。
我一直在玩Angular.js并非常喜欢它,但是我对它的哲学有疑问。这是Angular站点中控制器的一小段代码。
<div ng-controller="TodoCtrl">
<span>{{remaining()}} of {{todos.length}} remaining</span>
[ <a href="" ng-click="archive()">archive</a> ]
<ul class="unstyled">
<li ng-repeat="todo in todos">
<input type="checkbox" ng-model="todo.done">
<span class="done-{{todo.done}}">{{todo.text}}</span>
</li>
</ul>
<form ng-submit="addTodo()">
<input type="text" ng-model="todoText" size="30"
placeholder="add new todo here">
<input class="btn-primary" type="submit" value="add">
</form>
</div>
这基本上是HTML
在Angular指令中添加的。我发现可能有疑问的一个是:<a href="" ng-click="archive()">archive</a>
。
当Jeffrey Zeldman撰写Designing With Web Standards时,将标记(HTML),表示(CSS)和交互(JS)分离到不同文件中以实现可维护性成为了最佳实践。
我的问题是,Angular如何不违反它?我实际上真的很喜欢它,并且发现它非常强大,但是将click事件绑定到a
标记中的元素与编写此标准Web前标准代码的痕迹之间有什么区别:
<a href='#' onClick='showAlert()'>Click here</a>
<script>
var showAlert = function(){
alert('hey');
}
</script>
有用的答案除了使用框架的个人经验外,还可能参考文档。
我将从您可能会怀疑的那段代码开始,以及在AngularJS与纯HTML和Javascript处理该代码之间的根本区别。
这基本上是带有Angular指令的HTML。我发现潜在的怀疑是:
<a href="" ng-click="archive()">archive</a>
。
这看起来非常类似于我们十年前写的东西:
<a href="" onclick="archive()">archive</a>
但是,上述HTML和AngularJS实现之间存在根本的区别。对于AngularJS,该archive
函数位于我们控制的范围内,并且可以通过使用控制器进行操作。原始JS示例要求将archive
其放在全局命名空间中(由于许多原因,这是不好的)。
但是,我们仍然可以看到onclick
事件绑定的含义;它的意思是使人们能够声明性地将行为构建到视图中,并让JS处理实现细节。AngularJS做到了这一点,并且提供了一种以常规HTML无法实现的方式组织视图的不同作用域/上下文的方法。
是的,AngularJS涉及通过移动更多的表示并将关注点绑定到视图中来扩展HTML。好消息是我们正朝着HTML6的方向发展。以下是一些来自http://html6spec.com/的精选报价:
想象一下,能够以您想要标记的方式标记某些内容。想象一下改变
<div id="wrapper">
为<wrapper>
...网络正朝着巨大的应用程序商店迈进,我们需要拥抱它。我们使用的标记不应该对我们不利,它应该对我们有用。该规范就是这样做的。为了最终摆脱繁琐的规则和标准,并赋予我们开发人员完全的编码自由,请我们为网络提供一个更具语义性,简洁性和可读性的标记。
在某种程度上,AngularJS带给我们HTML6的所有优点,但是现在允许我们使用它。在过去的15年中,网络的使用方式发生了巨大变化,我们的工具仍然远远落后。对我们来说幸运的是,未来是光明与希望的灯塔,AngularJS将未来带回到了现在。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句