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 相关文章推荐
JS 跳转页面延迟2种方法
Mar 29 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
javascript unicode与GBK2312(中文)编码转换方法
Nov 14 Javascript
YUI模块开发原理详解
Nov 18 Javascript
js快速排序的实现代码
Dec 08 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
EasyUi datagrid 实现表格分页
Feb 10 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
Jun 03 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
Jan 10 Javascript
vue完成项目后,打包成静态文件的方法
Sep 03 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
Aug 07 Javascript
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
php实现建立多层级目录的方法
2014/07/19 PHP
php统计数组元素个数的方法
2015/07/02 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
PHP最常用的正则表达式
2017/02/13 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
判断用户是否在线的代码
2011/03/05 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
网游商务专员求职信
2013/10/15 职场文书
中学家长会邀请函
2014/01/17 职场文书
售后服务承诺书范文
2014/03/26 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
企业消防安全责任书
2014/07/23 职场文书
行政答辩状范文
2015/05/21 职场文书