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 相关文章推荐
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
Aug 02 Javascript
JavaScript事件类型中UI事件详解
Jan 14 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
Apr 16 Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
Dec 02 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
Nov 29 Javascript
vue.js移动数组位置,同时更新视图的方法
Mar 08 Javascript
vue webpack实用技巧总结
Apr 24 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 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网站提速三大“软”招
2006/10/09 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
2016/07/09 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
tensorflow识别自己手写数字
2018/03/14 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
如何在Django项目中引入静态文件
2019/07/26 Python
Python assert关键字原理及实例解析
2019/12/13 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
婚礼新郎父母答谢词
2014/01/16 职场文书
求职简历中自我评价
2014/01/28 职场文书
励志演讲稿范文
2014/04/29 职场文书
微电影大赛策划方案
2014/06/05 职场文书
离婚协议书样本
2015/01/26 职场文书
滴水洞导游词
2015/02/10 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记