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插件 tabBox实现代码
Feb 09 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
Extjs TimeField 显示正常时间格式的代码
Jun 28 Javascript
jQuery实现的瀑布流加载效果示例
Sep 13 Javascript
javascript this详细介绍
Sep 19 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
Jun 03 Javascript
js分页之前端代码实现和请求处理
Aug 04 Javascript
webpack+vue2构建vue项目骨架的方法
Jan 09 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
May 20 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原生函数一定好吗?
2014/12/08 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
Angular动态添加、删除输入框并计算值实例代码
2017/03/29 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
python 自动去除空行的实例
2018/07/24 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
基于python历史天气采集的分析
2019/02/14 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
python的sys.path模块路径添加方式
2020/03/09 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
五一手机促销方案
2014/03/08 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
党员评议思想汇报
2014/10/08 职场文书
销售会议开幕词
2015/01/28 职场文书
感恩的心主题班会
2015/08/12 职场文书
物业管理交接协议书
2016/03/24 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python