基于angular-utils-ui-breadcrumbs使用心得(分享)


Posted in Javascript onNovember 03, 2017

angular-utils-ui-breadcrumbs是一个用来自动生成面包屑导航栏的一个插件,需要依赖angular、UIRouter和bootstrap3.css。生成的界面截图如下,点击相应的面包屑会跳转到相应的路由,点击相应的路由也会自动生成相应的面包屑:

基于angular-utils-ui-breadcrumbs使用心得(分享)

安装:npm install angular-utils-ui-breadcrumbs

github:https://github.com/michaelbromley/angularUtils/tree/master/src/directives/uiBreadcrumbs

模块依赖:

var app = angular.module('myapp', ['ui.router.state.events','angularUtils.directives.uiBreadcrumbs']);

这里使用了ui.router.state.events模块,因为该uiBreadcrumbs依赖于$stateChangeSuccess事件,而uiRouter在1.x版本之后推荐使用Transition钩子,为了兼容原来的版本,将不被推荐的state events事件封装到了stateEvent.js文件中,该文件在UIRouter包中,所以我们需要引入该文件,angularUtils.directives.uiBreadcrumbs模块已经依赖了ui.router模块,我们不需要在这里重复引入。

文件目录结构如下:

基于angular-utils-ui-breadcrumbs使用心得(分享)

<!--index.html-->
<!DOCTYPE html>
<html lang="en" ng-app="myapp" ng-strict-di>
<head>
 <meta charset="UTF-8">
 <title>angular-utils-ui-breadcrumbs</title>
 <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet">
</head>
<body>
<ui-breadcrumbs displayname-property="data.displayName" abstract-proxy-property="data.proxy" template-url="./uiBreadcrumbs.tpl.html"></ui-breadcrumbs>
<ui-view name="home"></ui-view>
</body>
<script src="https://cdn.bootcss.com/angular.js/1.6.0/angular.min.js"></script>
<script src="https://cdn.bootcss.com/angular-ui-router/1.0.3/angular-ui-router.min.js"></script>
<script src="stateEvents.js"></script>
<script src="uiBreadcrumbs.js"></script>
<script src="index.js"></script>
</html>
//index.js
var app = angular.module('myapp', ['ui.router.state.events','angularUtils.directives.uiBreadcrumbs']);

app.config(['$stateProvider', '$urlRouterProvider', ($stateProvider, $urlRouterProvider) =>{
 $urlRouterProvider.otherwise('/home/production');
 $stateProvider
  .state('home', {
   abstract: true,
   url: '/home',
   data: {
    proxy: 'home.info'
   },
   views: {
    'home@': {
     template: '<div ui-view="content"></div>'
    }
   }
  })
  .state('home.info', {
   url: '/info',
   data: {
    displayName: 'home'
   },
   views: {
    'content@home': {
     template: '<a ui-sref="^.production">production</a>'
    }
   }
  })
  .state('home.production', {
   url: '/production',
   data: {
    displayName: 'production'
   },
   views: {
    'content@home': {
     template: '<a ui-sref=".fruits">fruits</a>'
    }
   }
  })
  .state('home.production.fruits', {
   url: '/fruits',
   data: {
    displayName: 'fruits'
   },
   views: {
    'content@home': {
     template: `<ul>
      <li><a ui-sref=".detail({type: 'apple'})">apple</a></li>
      <li><a ui-sref=".detail({type: 'banane'})">banane</a></li>
      <li><a ui-sref=".detail({type: 'pear'})">pear</a></li>
     </ul>`
    }
   }
  })
  .state('home.production.fruits.detail', {
   url: '/:type',
   data: {
    displayName: 'detail'
   },
   views: {
    'content@home': {
     template: '<div>{{$resolve.fruit}}</div>'
    }
   },
   resolve: {
    fruit: ['$stateParams', $stateParams =>{
     return $stateParams.type
    }]
   }
  })
}]);

下面详细说明一下该插件的使用方法:

<ui-breadcrumbs displayname-property="data.displayName"
    [template-url=""]
    [abstract-proxy-property=""]>
</ui-breadcrumbs>

dispalyname-property:(必须的),该属性指向了你声明路由时候的state配置对象的某个属性,该属性的值就是在该路由下面包屑会展示的值,如果没有指定,将会展示state的name属性。

template-url: (可选)指定uiBreadcrumbs.tpl.html的路径,该文件是ui-breadcrumbs指令的模版,如果不指定,将默认使用以下目录,以下是源码的内容:

  var moduleName = 'angularUtils.directives.uiBreadcrumbs';
 var templateUrl = 'directives/uiBreadcrumbs/uiBreadcrumbs.tpl.html';

 /**
  * Module
  */
 var module;
 try {
  module = angular.module(moduleName);
 } catch(err) {
  // named module does not exist, so create one
  module = angular.module(moduleName, ['ui.router']);
 }

abstract-proxy-property: (可选),当使用abstract state的时候,我们是不能够transition到该状态的。因此我们就不能够展示该状态的面包屑,因为当点击一个abstract state将会导致一个异常,所以为了解决这种情况,我们可以让abstract-proxy-property指向一个state config属性,该属性的值是某个state.name,即某个路由,当需要显示abstract state的面包屑的时候,将会寻找该state.name来代替该abstract state,如以上例子,我们指定了home.info这个状态。

以上这篇基于angular-utils-ui-breadcrumbs使用心得(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery实现的一个简单进度条效果实例
May 12 Javascript
Google 地图事件实例讲解
Aug 06 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
Node.js 使用流实现读写同步边读边写功能
Sep 11 Javascript
JavaScript 自定义事件之我见
Sep 25 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
vue-cli3.0 特性解读
Apr 22 Javascript
JavaScript原型对象原理与应用分析
Dec 27 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 #Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
Nov 03 #Javascript
微信小程序自动客服功能
Nov 02 #Javascript
微信小程序选择图片和放大预览图片功能
Nov 02 #Javascript
微信小程序实现图片放大预览功能
Oct 22 #Javascript
极简主义法编写JavaScript类
Nov 02 #Javascript
利用nvm管理多个版本的node.js与npm详解
Nov 02 #Javascript
You might like
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
php格式化工具Beautify PHP小小BUG
2008/04/24 PHP
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
php反射应用示例
2014/02/25 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
小程序实现投票进度条
2019/11/20 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
[01:15:29]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第三局
2016/03/04 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
python刷投票的脚本实现代码
2014/11/08 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
介绍下static、final、abstract区别
2015/01/30 面试题
毕业生求职推荐信
2013/11/04 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
博士生专家推荐信
2014/09/26 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
《将心比心》教学反思
2016/02/23 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
详解python网络进程
2021/06/15 Python