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 相关文章推荐
IE6与IE7中,innerHTML获取param的区别
Mar 15 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 Javascript
js 获取和设置css3 属性值的实现方法
May 06 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
jQuery焦点图切换特效代码分享
Sep 15 Javascript
跟我学习javascript的最新标准ES6
Nov 20 Javascript
javascript replace()第二个参数为函数时的参数用法
Dec 26 Javascript
浅谈React深度编程之受控组件与非受控组件
Dec 26 Javascript
Vue项目路由刷新的实现代码
Apr 17 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中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
JS 添加千分位与去掉千分位的示例
2013/07/11 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
script标签属性用type还是language
2015/01/21 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
微信小程序中button组件的边框设置的实例详解
2017/09/27 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
vue实现简单学生信息管理
2020/05/30 Javascript
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python 字典操作提取key,value的方法
2019/06/26 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
Django用户身份验证完成示例代码
2020/04/03 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
红头文件任命书范本
2014/06/05 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
植树节新闻稿
2015/07/17 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
二年级作文之动物作文
2019/11/13 职场文书
在 SQL 语句中处理 NULL 值的方法
2021/06/07 SQL Server
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL