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 相关文章推荐
JavaScript 设计模式学习 Singleton
Jul 27 Javascript
js报错 Object doesn't support this property or method的原因分析
Mar 31 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
Dec 31 Javascript
IE的事件传递-event.cancelBubble示例介绍
Jan 12 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
基于jQuery实现自动轮播旋转木马特效
Nov 02 Javascript
jquery实现下拉框左右选择功能
Feb 21 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
May 17 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
Vue修改项目启动端口号方法
Nov 07 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 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
php 抽象类的简单应用
2011/09/06 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
JavaScript调用模式与this关键字绑定的关系
2018/04/21 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
python从Oracle读取数据生成图表
2020/10/14 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
污水厂厂长岗位职责
2014/01/04 职场文书
迟到检讨书5000字
2014/01/31 职场文书
网管求职信
2014/03/03 职场文书
董存瑞观后感
2015/06/11 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
Python基础之Socket通信原理
2021/04/22 Python
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS