iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >如何借助AngularJS写优雅的代码
  • 654
分享到

如何借助AngularJS写优雅的代码

2024-04-02 19:04:59 654人浏览 安东尼
摘要

本篇文章为大家展示了如何借助angularjs写优雅的代码,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。接触AngularJS还真有点碰巧,在用Jquery写数据绑

本篇文章为大家展示了如何借助angularjs写优雅的代码,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

接触AngularJS还真有点碰巧,在用Jquery写数据绑定的时候,我被数据对象和DOM之间的同步整烦了,要写一大堆方法绑定和取值/设值的代码逻辑,丑得要死。简单说来,就是:

  1. 数据对象发生变更以后,要及时更新DOM树;

  2. 用户操作改变DOM树以后,要回头更新数据对象

这个问题还是举例来说清楚一些,比如我定义了这样一个queryObj:

{name: "sally", price: 30}

现在有这样的DOM对象:

<input type="text" value="sally" /> <label>sally</label>

1、queryObj发生变化的时候,这两个DOM对象要及时更新,一个是value需要更新,一个则是标签里面的文本需要更新。

我就得写这样的JQuery设值语句:

$("input").val(queryObj.name);  $("label").text(queryObj.name);

2、当用户操作改变input里面的值的时候,我也需要同步更新label里面的值,以及queryObj里面的值:

$("input").keydown(function(){     var data = $(this).val();     $("label").text(data);     queryObj.name = data; });

可以想象在DOM对象很多的时候,这种绑定语句和设值语句恶心得令人发指。

就这个问题,第1条对象的变更需要及时刷新到DOM上,有好多办法,underscore.js、mustache之类的,模板+数据绑定嘛,当 然,需要手动调用来更新;但是反过来的第2条,DOM变更需要及时刷新到其它DOM对象上,也要刷回数据对象,我找了一会儿,也没有看见有什么现成的实 现,正火大地准备自己写一个简单的机制,这时Google到了AngularJS的“two way  binding”,哈哈,暗爽,这不正是我想要的东西么?

鉴于这不是AngularJS的教程。在此我假设你有AngularJS的基础知识,否则,建议你先阅读AngularJS简单易懂的教程。

双向绑定

不管是mvc还是MVVM,数据绑定的过程总是惹人厌烦的,这样的事情做得越少越好;如果需要数据绑定的逆过程,这样的问题是现有MVC框架所很少考虑到的。AngularJS不但把双向绑定的事情替我做了,而且也避免了特定视图类的定义,直接使用原始的数据对象就好。

还是就上面这个问题,在写html标签的时候,增加ng-app和一个ng-controller的属性,至于占位符,和普通的模板机制没有什么区别:

<div ng-app ng-controller="QueryController">     <input type="text" value="{{queryObj.name}}" />     <label>{{queryObj.name}}</label> </div>

并且定义一个和ng-controller同名的方法,参数名为$scope:

function QueryController($scope) {     $scope.queryObj = {name : "sally", price : 30}; }

完毕了,这以后label、input和$scope.queryObj这三者就同步了,DOM变化的时候,其它二者也会被及时更新。这就是AngularJS的双向绑定。我觉得这大概是AngularJS最精华的部分。

AngularJS官网的教程上,还给了这样的说明:

从上面的例子,控制器、模板、数据模型、视图,这几个概念和之间的关系应该已经明晰了。

AngularJS遵循的设计理念,是构建UI应当用声明式的方式来(什么是声明式编程,请参阅我关于编程范型的文章)。值得一提的是,AngularJS引入的directive确实方便扩展了标签集,可以写出DSL样子的代码,非常非常灵活,比如:

<Alert>   <p>Error occurs.</p> </Alert>

这其中的Alert就是通过directive实现的自定义的标签,最终可以被解析成具备“警告”样式的html,但是,在对于directive的定义上面,就连官网的例子都是,生写html片段模板代码字符串的,用起来确实让我不够舒服。

依赖注入

依赖注入(Dependency Injection,DI)对于使用过spring程序员来说实在是再熟悉不过了,所谓依赖注入,就是把某个过程中注入值的步骤交给外部框架、容器来完成。举例来说,这样的代码:

function PhoneListCtrl($scope, $Http) {   $http.get('phones/phones.JSON').success(function(data) {     $scope.phones = data;   });    $scope.orderProp = 'age'; }

$scope、$http都是需要AngularJS框架传入的服务变量,在此,参数的名字不可随意修改,因为AngularJS是根据它来判定需要依赖注入的。

服务可以自己定义,再利用依赖注入的方式加进来使用,这对于模块化和重用是很有帮助的。

过滤器

AngularJS的表达式功能比较弱,不支持条件判断和流程控制,不过好在支持过滤器,这就一定程度上弥补了这个缺憾。过滤器是个很有趣的特 性,让人想起了管道编程。到这里,开个玩笑,你大概也发现AngularJS真是一个到处抄袭,哦不,是借鉴各种概念和范型的东西,比如依赖注入抄 Spring,标签定义抄Flex,过滤器抄linux的管道:

{{ "lower cap string" | uppercase }} {{ 1304375948024 | date:"MM/dd/yyyy @ h:mma" }}

既然是管道编程,那么肯定支持迭代地使用管道:

<li ng-repeat="phone in phones | filter:query | orderBy:orderProp" class="thumbnail">

事件处理

解耦一定是相对的,在我们使用各种绑定语句把onClick="javascript:xxx"从DOM上拿掉的时候,我们就已经想到,总有一天,写那些DOM事件绑定的语句写烦了,一定还会拿回来:

<img ng-src="{{img}}" ng-click="setImage(img)">

相应地,定义setImage:

$scope.setImage = function(imageUrl) {     $scope.mainImageUrl = imageUrl; }

无论是把这个绑定关系拿走还是拿回来,都是有道理的,选择你最倾心的方式。就我而言,我倾向于把同一模块的代码放置在一起,增加可理解性,而不在乎它的组成是DOM声明还是JavaScript解释。

另外,值得一提的是不同controller之间的通信方式,AngularJS推荐的方式是采用事件,具体说,controller是可以嵌套 的,$broadcast会把事件广播给所有子controller,而$emit则会将事件冒泡传递给父controller,$on则是 AngularJS的事件注册函数:

$scope.$on("DataChange", function (event, msg) {     $scope.$broadcast("DataChange", msg); });

但是,这让我颇为不爽,如果我的两个视图在不同的controller内,我还非得要通过事件机制来保持同步的话,如此啰嗦,我还需要AngularJS干嘛?

吐槽归吐槽,AngularJS还是非常值得学习使用的,尤其是其中的双向绑定,用起来真是太爽了。

上述内容就是如何借助AngularJS写优雅的代码,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网html频道。

--结束END--

本文标题: 如何借助AngularJS写优雅的代码

本文链接: https://www.lsjlt.com/news/86241.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何借助AngularJS写优雅的代码
    本篇文章为大家展示了如何借助AngularJS写优雅的代码,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。接触AngularJS还真有点碰巧,在用JQuery写数据绑...
    99+
    2024-04-02
  • 如何写出优雅的JS 代码
    目录变量使用有意义和可发音的变量名对同一类型的变量使用相同的词汇使用可搜索的名字使用解释性变量避免费脑的猜测无需添加不必要的上下文使用默认参数代替逻辑或(与)运算函数函数参数(理想情...
    99+
    2024-04-02
  • 助您写出优雅的Java代码七点建议
    有的Java程序代码一眼看上去就让人觉得混乱且费解,而有的代码却能给人如沐春风之感。本文将通过七点建议,帮助您写出更好、更优雅的程序代码。...
    99+
    2023-06-02
  • 怎么写出优雅的C++代码
    本篇内容主要讲解“怎么写出优雅的C++代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么写出优雅的C++代码”吧!工欲善其事必先利其器,优雅的代码离不开静态代码检查工具,大家可能平时使用较多...
    99+
    2023-06-15
  • 怎么写出优雅的Java代码
    这篇文章主要讲解了“怎么写出优雅的Java代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么写出优雅的Java代码”吧!1.使用 IntelliJ IDEA 作为您的集成开发环境 (ID...
    99+
    2023-06-16
  • 编写高效且优雅的 Python 代码(
    貌似只能创建一个专栏,所以这篇文章只好放到“JavaScript从前端到全终端”里了 原文链接:Effective Python Python 作为一门入门极易并容易上瘾的语音,相信已经成为了很多人 “写着玩” 的标配脚本语言。但很多...
    99+
    2023-01-31
    高效 优雅 代码
  • 怎么写出优雅耐看的JavaScript代码
    这篇文章主要介绍“怎么写出优雅耐看的JavaScript代码”,在日常操作中,相信很多人在怎么写出优雅耐看的JavaScript代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2024-04-02
  • 怎么写出优雅耐看的css代码
    这篇“怎么写出优雅耐看的css代码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面...
    99+
    2024-04-02
  • 如何编写优雅的Dockerfile
    导读Kubernetes要从容器化开始,而容器又需要从Dockerfile开始,本文将介绍如何写出一个优雅的Dockerfile文件。文章主要内容包括:Docker容器Dockerfile使用多阶构建感谢公司提供大量机器资源及时间让我们可以...
    99+
    2023-06-03
  • ASP Web部署的艺术:如何写出优雅高效的代码
    编写可重用组件 可重用组件可以极大地提高开发效率和代码的可维护性。ASP提供了许多内置组件,如ASP.NET Web Forms和ASP.NET MVC,这些组件可以用于构建各种Web应用程序。此外,还可以创建自己的自定义组件,以满...
    99+
    2024-02-21
    ASP Web部署 代码优化 组件 缓存 数据库查询
  • 如何写出优雅的vue.js
    这篇文章主要为大家展示了“如何写出优雅的vue.js”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何写出优雅的vue.js”这篇文章吧。1. watch 与 ...
    99+
    2024-04-02
  • 怎么写出清晰又优雅的Python代码
    本篇文章为大家展示了怎么写出清晰又优雅的Python代码,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。个人认为,下面这几条规则是绝对应该遵循的。01 与空白有关的建议在Python中,空白(whit...
    99+
    2023-06-15
  • JavaScript代码优雅,简洁的编写技巧总结
    1. 强类型检查 用===代替 == // 如果处理不当,它会极大地影响程序逻辑。这就像,你想向左走,但由于某种原因,你向右走 0 == false // true 0 === fa...
    99+
    2022-11-13
    JavaScript代码编写技巧 编写优雅 简洁的JavaScript代码 优雅的JavaScript代码
  • 这样写python注释让代码更加的优雅
    python这样注释,让你的代码看起来更加的优雅,是不是常常感觉自己的python代码写出来,看起来特别的乱,虽然可以正常运行,但是在优雅性上似乎欠缺的很多,这篇文章主要教你,如何让...
    99+
    2024-04-02
  • PHP函数开发技术教程:如何优雅地编写代码?
    PHP是一门强大的编程语言,拥有许多内置的函数,但是在实际开发中,我们常常需要自己编写一些自定义的函数来满足特定的需求。本文将介绍PHP函数开发的技巧,帮助你编写出优雅的、高质量的代码。 一、函数的定义 在PHP中,函数的定义使用关键字fu...
    99+
    2023-08-09
    开发技术 教程 函数
  • 如何用react优雅的书写CSS
    目录1.内联样式 2.使用import导入方式 3.css module模块导出 4.使用styled-components 4.1初步使用4.2通过attrs设置属性4.3css继...
    99+
    2024-04-02
  • Java Iterator 与 Iterable:迈入编写优雅代码的行列
    Iterator 接口 Iterator 接口是一个用于遍历集合的接口。它提供了几个方法,包括 hasNext()、next() 和 remove()。hasNext() 方法返回一个布尔值,指示集合中是否还有下一个元素。next() ...
    99+
    2024-02-13
    Java Iterator Iterable 集合 循环
  • 详解Go语言如何利用高阶函数写出优雅的代码
    目录前言问题白银黄金王者总结前言 go项目中经常需要查询db,按照以前java开发经验,会根据查询条件写很多方法,如: GetUserByUserIDGetUsersByNameGe...
    99+
    2023-01-05
    Go语言高阶函数 Go语言 函数 Go 高阶函数
  • 书写Python代码的一种更优雅方式(推荐!)
    目录1 简介2 在Python中配合pipe灵活使用链式写法2.1 pipe中常用的管道操作函数2.1.1 使用traverse()展平嵌套数组2.1.2 使用dedup()进行顺序...
    99+
    2024-04-02
  • 如何借助log4j把日志写入数据库中
    如何借助log4j把日志写入数据库中,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。    ...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作