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 相关文章推荐
解决jquery的.animate()函数在IE6下的问题
Dec 03 Javascript
jquery.tmpl JQuery模板插件
Oct 10 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
使用js实现关闭js弹出层的窗口
Feb 10 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
简单理解vue中实例属性vm.$els
Dec 01 Javascript
React如何利用相对于根目录进行引用组件详解
Oct 09 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 Javascript
Vue+TypeScript中处理computed方式
Apr 02 Vue.js
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
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
Python中的列表知识点汇总
2015/04/14 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
python flask搭建web应用教程
2019/11/19 Python
python super用法及原理详解
2020/01/20 Python
python实现人脸签到系统
2020/04/13 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
Python如何定义有默认参数的函数
2020/08/10 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
华丽的手绘陶瓷:MacKenzie-Childs
2017/02/04 全球购物
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
MIXIT官网:俄罗斯最大的化妆品公司之一
2020/01/25 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
介绍一下linux的文件系统
2015/10/06 面试题
二年级小学生评语
2014/04/21 职场文书
旷课检讨书500字
2014/10/14 职场文书
个人查摆剖析材料
2014/10/16 职场文书