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 处理表单元素的代码
Feb 15 Javascript
JSON 数据格式介绍
Jan 13 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
May 10 Javascript
ajax不执行success回调而是执行了error回调
Dec 10 Javascript
可编辑下拉框的2种实现方式
Jun 13 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
Aug 18 Javascript
javascript数组去重的方法汇总
Apr 14 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
JS实现直接运行html代码的方法
Mar 13 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
Jan 05 jQuery
p5.js绘制创意自画像
Nov 04 Javascript
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
yii2安装详细流程
2018/05/23 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
JavaScript 无符号右移运算符
2009/04/17 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
如何在存储过程中使用Loop
2016/01/05 面试题
最新计算机专业自荐信
2013/10/16 职场文书
后勤人员岗位职责
2013/12/17 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
服务员态度差检讨书
2014/10/28 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
结婚主持人致辞
2015/07/28 职场文书
获奖感言怎么写
2015/07/31 职场文书
实习感想范文
2015/08/10 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
MySQL 重写查询语句的三种策略
2021/05/10 MySQL