基于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 相关文章推荐
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 Javascript
用js调用迅雷下载代码的二种方法
Apr 15 Javascript
javascript生成随机数的方法
May 16 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
Ajax和Comet技术总结
Feb 19 Javascript
JavaScript登录记住密码操作(超简单代码)
Mar 22 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 Javascript
关于Vue单页面骨架屏实践记录
Dec 13 Javascript
一秒学会微信小程序制作table表格
Feb 14 Javascript
原生JS中应该禁止出现的写法
May 05 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
如何判断php数组的维度
2013/06/10 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
jquery实现一个全局计时器(商城可用)
2017/06/30 jQuery
React 子组件向父组件传值的方法
2017/07/24 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
微信小程序实现工作时间段选择
2019/02/15 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
[45:18]完美世界DOTA2联赛循环赛 PXG vs IO 第二场 11.06
2020/11/09 DOTA
初步理解Python进程的信号通讯
2015/04/09 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python中扩展包的安装方法详解
2017/06/14 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
销售实习自我鉴定
2013/12/07 职场文书
酒店个人培训自我鉴定
2013/12/11 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
小学元宵节活动总结
2015/02/06 职场文书
仙境之桥观后感
2015/06/16 职场文书