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 相关文章推荐
js 禁用只读文本框获得焦点时的退格键
Apr 25 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
Javascript弹出窗口的各种方法总结
Nov 11 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
jQuery的DOM操作之删除节点示例
Jan 03 Javascript
node.js中的fs.chown方法使用说明
Dec 16 Javascript
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 Javascript
vue学习之Vue-Router用法实例分析
Jan 06 Javascript
基于better-scroll 实现歌词联动功能的代码
May 07 Javascript
详解vue中v-on事件监听指令的基本用法
Jul 22 Javascript
Vue之封装公用变量以及实现方式
Jul 31 Javascript
JavaScript ES 模块的使用
Nov 12 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
php统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
Python 随机生成中文验证码的实例代码
2013/03/20 Python
python连接mysql并提交mysql事务示例
2014/03/05 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
Python生成随机数组的方法小结
2017/04/15 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python连接Impala实现步骤解析
2020/08/04 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
工程现场管理求职自荐信
2013/10/02 职场文书
科室工作的个人自我评价
2013/10/30 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
2015年工程师工作总结
2015/04/30 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
退休欢送会致辞
2015/07/31 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js
MySQL 字符集 character
2022/05/04 MySQL