AngualrJS中的Directive制作一个菜单


Posted in Javascript onJanuary 26, 2016

说下我经常写菜单的方式:

<ul>
<li data-ng-class="{'active': highlight('/orders')}">
<a href="#/orders">Orders</a>
</li>
</ul>

菜单项是否高亮显示取决于controller中的highlight方法。

vm.highlight = funciton(path){
return $locaiton.path().substr(0, path.lenght) === path;
}

如果以Directive的方式会更简洁。

<ul menu-highlighter highlight-class-name="active">
<li><a href="#/customers">Customers</a></li>
<li><a href="#/orders">Customers</a></li>
<li><a href="#/about">Customers</a></li>
</ul>

Directive大致是:

(function(){
var injectParams = ['$location'];
var menuHighlighter = function($location){
var link = function(scope, element){
function setActive(){
var path = $location.path();
var className = scope.highlightClassName || 'active';
if(path){
angular.forEac(element.find('li'), function(li){
//<a href="#/customers">Customers</a>
var anchor = li.querySelector('a');
//#/customers
var href=(anchor && anchor.href) ? anchor.href : anchor.getAttribute('data-href').replace('#','');
//customers
var trimmedHref = href.substr(href.indexOf('#/')+1, href.length);
var basePath = path.substr(0, trimmedHref.length);
if(trimmedHref === basePath){
angular.element(li).addClass(className);
} else {
angular.element(li).removeClass(className);
}
});
} 
}
setActive();
scope.$on('$locationChangeSuccess', setActive);
};
return {
restrict: 'A',
scope: {
highlightClassName: '@'
},
link: link
}
};
menuHighlighter.$inject = injectParams;
angular.module('my.directives')
.directive('menuHighlighter', menuHighlighter);
}());

以上内容是针对AngualrJS中的Directive制作一个菜单的相关知识,希望对大家有所帮助。

Javascript 相关文章推荐
jquery解析JSON数据示例代码
Mar 17 Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
Mar 11 Javascript
JS中常用的正则表达式
Sep 29 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
Oct 24 Javascript
前端主流框架vue学习笔记第一篇
Jul 26 Javascript
JS+jQuery实现注册信息的验证功能
Sep 26 jQuery
详解使用webpack打包编写一个vue-toast插件
Nov 08 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
May 01 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
uniapp微信小程序实现一个页面多个倒计时
Nov 01 Javascript
js实现网页图片延时加载 提升网页打开速度
Jan 26 #Javascript
详解javascript new的运行机制
Jan 26 #Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
Jan 26 #Javascript
基于JavaScript实现瀑布流布局(二)
Jan 26 #Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
Jan 26 #Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
Jan 26 #Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 #Javascript
You might like
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
一些常用的Javascript函数
2006/12/22 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
javascript实现简单的全选和反选功能
2016/01/05 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
JavaScript实现网页留言板功能
2020/11/23 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
基于python的Paxos算法实现
2019/07/03 Python
python读写csv文件实例代码
2019/07/05 Python
python实现简单井字棋游戏
2020/03/04 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
尼克松手表官网:Nixon手表
2019/03/17 全球购物
社区母亲节活动方案
2014/03/05 职场文书
库房保管员岗位职责
2014/04/07 职场文书
心理健康活动总结
2014/04/30 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android