AngularJS中的DOM操作用法分析


Posted in Javascript onNovember 04, 2016

本文实例讲述了AngularJS中的DOM操作用法。分享给大家供大家参考,具体如下:

在angular中使用第三方插件时最好都封装到指令(directives)中去,DOM操作也最好都解构到指令中。

避免使用 jQuery 来操作 DOM,包括增加元素节点,移除元素节点,获取元素内容,隐藏或显示元素。你应该使用 directives 来实现这些动作,有必要的话你还要编写自己的 directives。

如果你感到很难改变习惯,那么考虑从你的网页中移除 jQuery 吧。真的,AngularJS 中的 $http 服务非常强大,基本可以替代 jQuery 的 ajax 函数,而且 AngularJS 内嵌了 jQLite —— 它内部实现的一个 jQuery 子集,包含了常用的 jQuery DOM 操作方法,事件绑定等等。但这并不是说用了AngularJS 就不能用 jQuery 了。如果你的网页有载入 jQuery 那么 AngularJS 会优先采用你的 jQuery,否则它会 fall back 到 jQLite。

需要自己编写 directives 的情况通常是当你使用了第三方的 jQuery 插件。因为插件在 AngularJS 之外对表单值进行更改,并不能即时反应到 Model 中。例如我们用得比较多的 jQueryUI datepicker 插件,当你选中一个日期后,插件会将日期字符串填到 input 输入框中。View 改变了,却并没有更新 Model,因为 $('.datepicker').datepicker(); 这段代码不属于 AngularJS 的管理范围。我们需要编写一个directive 来让 DOM 的改变即时更新到 Model 里。

var directives = angular.module('directives', []);
directives.directive('datepicker', function() {
  return function(scope, element, attrs) {
    element.datepicker({
      inline: true,
      dateFormat: 'dd.mm.yy',
      onSelect: function(dateText) {
        var modelPath = $(this).attr('ng-model');
        putObject(modelPath, scope, dateText);
        scope.$apply();
      }
    });
  }
});

然后在 HTML 中引入这个 direcitve

<input type="text" datepicker ng-model="myObject.myDateValue" />

说白了 directive 就是在 HTML 里写自定义的标签属性,达到插件的作用。这种声明式的语法扩展了 HTML。

需要说明的是,有一个 AngularUI 项目提供了大量的 directive 给我们使用,包括 Bootstrap 框架中的插件以及基于 jQuery 的其他很热门的 UI 组件。还有http://www.ngnice.com 社区贡献的ngshowcase。 AngularJS 的社区很活跃,生态系统健全。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
Oct 31 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
May 31 Javascript
判断js数据类型的函数实例详解
May 23 Javascript
vue实现修改图片后实时更新
Nov 14 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
Dec 01 Vue.js
JS对大量数据进行多重过滤的方法
Nov 04 #Javascript
AngularJS模板加载用法详解
Nov 04 #Javascript
jQuery 遍历map()方法详解
Nov 04 #Javascript
Sortable.js拖拽排序使用方法解析
Nov 04 #Javascript
jQuery图片加载显示loading效果
Nov 04 #Javascript
JavaScript 深层克隆对象详解及实例
Nov 03 #Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
Nov 03 #Javascript
You might like
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
js 省地市级联选择
2010/02/07 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
详谈innerHTML innerText的使用和区别
2017/08/18 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
解决vue项目 build之后资源文件找不到的问题
2020/09/12 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
python实现的简单RPG游戏流程实例
2015/06/28 Python
python中私有函数调用方法解密
2016/04/29 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
2019/07/08 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python3监控疫情的完整代码
2020/02/20 Python
Python更换pip源方法过程解析
2020/05/19 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
2020/06/12 Python
世界最大的票务市场:viagogo
2017/02/16 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
某同学的自我鉴定范文
2013/12/26 职场文书
公司新员工欢迎词
2015/09/30 职场文书
终止合同协议书范本
2016/03/22 职场文书
浅析MongoDB之安全认证
2021/06/26 MongoDB
sql server 累计求和实现代码
2022/02/28 SQL Server