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 07 Javascript
jQuery预加载图片常用方法
Jun 15 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
jquery动感漂浮导航菜单代码分享
Apr 15 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
浅谈js的ajax的异步和同步请求的问题
Oct 07 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
Oct 19 Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
js实现多图和单图上传显示
Dec 18 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
PHP中文汉字验证码
2007/04/08 PHP
PHP实现懒加载的方法
2015/03/07 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
JavaScript面象对象设计
2008/04/28 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
微信小程序 教程之wxapp视图容器 swiper
2016/10/19 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
js实现筛选功能
2020/11/24 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[03:56]显微镜下的DOTA2第十一期——鬼畜的死亡先知播音员
2014/06/23 DOTA
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python接口测试结果集实现封装比较
2020/05/01 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
办护照工作证明范本
2014/01/14 职场文书
建议书标准格式
2014/03/12 职场文书
经典禁毒标语
2014/06/16 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python