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 相关文章推荐
实现png图片和png背景透明(支持多浏览器)的方法
Sep 08 Javascript
JQuery实现的在新窗口打开链接的方法小结
Apr 22 Javascript
首页图片漂浮效果示例代码
Jun 05 Javascript
jquery.qtip提示信息插件用法简单实例
Jun 17 Javascript
javascript实现瀑布流动态加载图片原理
Aug 12 Javascript
微信小程序 图片加载(本地,网路)实例详解
Mar 10 Javascript
纯jQuery实现前端分页功能
Mar 23 jQuery
Bootstrap.css与layDate日期选择样式起冲突的解决办法
Apr 07 Javascript
详解VUE 定义全局变量的几种实现方式
Jun 01 Javascript
详解AngularJS脏检查机制及$timeout的妙用
Jun 19 Javascript
ES6 系列之 Generator 的自动执行的方法示例
Oct 19 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 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
博士208HAF收音机实习报告
2021/03/02 无线电
让PHP支持断点续传的源码
2010/05/16 PHP
php+xml编程之SimpleXML的应用实例
2015/01/24 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
JQuery onload、ready概念介绍及使用方法
2013/04/27 Javascript
js分页工具实例
2015/01/28 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
Javascript基于OOP实实现探测器功能代码实例
2020/08/26 Javascript
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
python批量处理文件或文件夹
2020/07/28 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
python实现超级玛丽游戏
2020/03/18 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
个人应聘自我评价分享
2013/11/18 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
教师个人自我评价
2015/03/04 职场文书
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏