Angular.JS通过指令操作DOM的方法


Posted in Javascript onMay 10, 2017

在指令而非在控制器中操作DOM

相信大家在页面处理中,难免会遇到操作DOM的情况,在AngularJS中,对DOM的操作是在指令而非控制器中完成的。

AngularJS强调隔离的思想:把复杂的逻辑和操作放在指令或服务中,控制器作为视图和$scope之间的桥梁,仅仅用来存储数据模型。

jqLite

为了便于DOM操作,AngularJS内部封装了angular.element,如果现有项目中已经引入的jQuery,angular.element相当于jQuery函数的别名,否则,angular.element代表AngularJS对jQuery封装的一个子集,称为”jQuery lite”或者jqLite。jqLite不具备jQuery全部方法,详见AngularJS官方文档 angular.element。

link-function

link-function可以注册DOM监听器,同时更新DOM,更多link-function介绍参考这篇文章AngularJS Custom-Directives link-function guide

指令代码

一个引入jQuery操作DOM的指令如下:

webApp.directive("detailTopStick", ["$timeout", "$window", function ($timeout, $window) {
 return {
 restrict: "A",
 link: function (scope) {
 $timeout(function () {
 var navbar = $(".navbar-nav"); 
 var navbarOffsetTop = navbar.offset().top;
 var headerInfo = $(".header-info");
 var headerInfoMarginBottom = parseInt(headerInfo.css("margin-bottom"));
 var navbarHeight = parseInt(navbar.css("height"));
 
 angular.element($window).bind("resize", function () { // 窗口绑定resize事件
  navbar.css("width", headerInfo.width());
  navbarOffsetTop = navbar.offset().top;
  scope.$apply();
 });
 
 angular.element($window).bind("scroll", function () {
  if ($window.scrollY > navbarOffsetTop) {
  navbar.css("width", headerInfo.width());
  navbar.addClass("detail-navbar-fix");
  headerInfo.css("margin-bottom", headerInfoMarginBottom + navbarHeight);
  }
  else {
  navbar.removeClass("detail-navbar-fix");
  headerInfo.css("margin-bottom", headerInfoMarginBottom);
  }
  scope.$apply();
 });
 
 navbar.on("click", function () {
  if ($window.scrollY > navbarOffsetTop) {
  $window.scrollTo(0, navbarOffsetTop);
  }
 });
 });
 }
 };
}]);

如果未引入jquery,可以这样获取元素:angular.element(document.querySelector(“.class-name”))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
各情景下元素宽高的获取实现代码
Sep 13 Javascript
js解析与序列化json数据(二)序列化探讨
Feb 01 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
JavaScript学习笔记之Cookie对象
Jan 22 Javascript
jquery图形密码实现方法
Mar 11 Javascript
JavaScript获取网页中第一个图片id的方法
Apr 03 Javascript
JavaScript编写连连看小游戏
Jul 07 Javascript
微信小程序 教程之事件
Oct 18 Javascript
详解JS数值Number类型
Feb 07 Javascript
element-ui 关于获取select 的label值方法
Aug 24 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
JS实现队列的先进先出功能示例
May 10 #Javascript
BootStrap的两种模态框方式
May 10 #Javascript
微信小程序之购物车功能
Sep 23 #Javascript
js canvas实现QQ拨打电话特效
May 10 #Javascript
bootstrap弹出层的多种触发方式
May 10 #Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 #Javascript
微信小程序 支付后台java实现实例
May 09 #Javascript
You might like
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
Node.js编码规范
2014/07/14 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
Javascript实现关闭广告效果
2021/01/29 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Django数据库表反向生成实例解析
2018/02/06 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Python 绘制可视化折线图
2020/07/22 Python
Python扫描端口的实现
2021/01/25 Python
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
小学信息技术教学反思
2014/02/10 职场文书
幼儿教师工作感言
2014/02/14 职场文书
校园环保标语
2014/06/13 职场文书
体育专业求职信
2014/07/16 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
重温入党誓词主持词
2015/06/29 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS
sql字段解析器的实现示例
2021/06/23 SQL Server