Node.js引入UIBootstrap的方法示例


Posted in Javascript onMay 11, 2018

很多Web管理系统的侧边菜单是可折叠的(手风琴样式),我们在前面两篇文章里的HTML模板,自己用div、css做了一些处理,可效果不好。所以我请来了一个前端UI框架,UI Bootstrap,来帮忙。别看它名字里带一个Bootstrap,但它并不依赖Bootstrap,而是用AngularJS实现的原生指令哦。我讨厌太多的依赖,这个我喜欢。

这篇我们以“Angular简单示例”里的AngularDemo为基础,我说到的目录什么的,都遵循express应用的默认目录结构。

UI Bootstrap

UI Bootstrap在github上有一个简单介绍:

Native AngularJS (Angular) directives for Bootstrap. Smaller footprint (20kB gzipped), no 3rd party JS dependencies (jQuery, bootstrap JS) required.

还有一个Readme,把安装、构建等讲了个大概,这些我都不感兴趣,我要快速将其引入Node.js的应用里,所以一切手动来做,直接下载人家Build好的文件。

安装

最小安装需要:

  1. ui-bootstrap-tpls
  2. angular-animate
  3. bootstrap CSS文件
  4. bootstrap CSS需要的字体文件glyphicons-halflings-regular.woff

我选择带模板的ui-bootstrap库,即带tpls的,这种版本的库,模板与指令混在一起了,不能自定义模板和样式。如果你要自定义外观,那就下载不带tpls的。Build好的文件可以在这里https://github.com/angular-ui/bootstrap/tree/gh-pages#build-files下载,选你喜欢的好了。

0.13.x版本的UI Bootstrap要求Angular 1.3.x或1.4.x。我使用0.13.3版本的UI Bootstrap、1.4.3版本的AngularJS及angular-animate。

1.4.3的Angular及animate组件,都可以到这里下载:https://code.angularjs.org/1.4.3/。打不开就翻qiang或VPN。

bootstrap的CSS文件,这里可以下载:http://www.bootstrapcdn.com/。字体文件google一下可以下载到,或者http://code.taobao.org/svn/mczg/trunk/mczg/WebRoot/bootstrap/fonts/glyphicons-halflings-regular.woff。

都下载后,需要处理一下。

  1. angular-1.4.3.min.js,这个之前就说过了,放在public/javascripts目录下。
  2. angular-animate-1.4.3.min.js(不是这个名字的就改成这样),放在public/javascripts目录下。
  3. ui-bootstrap-tpls-0.13.3.min.js(不是这个名字的就改成这样),放在public/javascripts目录下。
  4. bootstrap-3.1.1.min.css(不是这个名字的就改成这样),放在public/stylesheets目录下。
  5. glyphicons-halflings-regular.woff(不是这个名字的就改成这样),在public目录下新建一个fonts目录,放进去

OK,手动安装基本就绪了。

使用UI Bootstrap组件

为了使用UI Bootstrap,要引入三个js文件,一个css文件。HTML模板大概是这样的:

<!DOCTYPE html>
<html ng-app="myApp">
 <head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="/stylesheets/bootstrap-3.1.1.min.css" rel="external nofollow" rel="external nofollow" >
 </head>
 <body>
  ...
  <script src="/javascripts/angular-1.4.3.min.js"></script>
  <script src="/javascripts/angular-animate-1.4.3.min.js"></script>
  <script src="/javascripts/ui-bootstrap-tpls-0.13.3.min.js"></script>  
 </body>
</html>

然后,你使用Angular,至少还有一个实现作用域模型的js文件,放在“/body”标签上面吧。

在HTML中添加了相关文件后,就可以照着UI Bootstrap的文档来学怎么用相关组件和指令了。

UI Bootstrap的详细文档在这里:http://angular-ui.github.io/bootstrap/。里面对现在支持的指令做了详细介绍,还有现成的例子可以拿赖学习。不过,要翻qiang。

使用UI Bootstrap的Demo

修改两个文件,admin.html和admin.js。

bootstrap-admin.html

把public目录下的admin.html复制一份,重命名为bootstrap-admin.html,用notepad++打开,将内容修改成下面这样:

<!DOCTYPE html>
<html ng-app="x-admin">
 <head>
  <meta charset="UTF-8">
  <title>X管理系统</title>
  <link rel="stylesheet" href="/stylesheets/admin.css" rel="external nofollow" >
  <link rel="stylesheet" href="/stylesheets/bootstrap-3.1.1.min.css" rel="external nofollow" rel="external nofollow" >
 </head>
 <body>
  <div class="x-view-full" ng-controller="x-controller">
    <div class="x-project-header">
     <div id="x-project-title">X管理后台</div>
     <div id="x-login-user"><a href="/user/tttt" rel="external nofollow" >{{currentUser}}</a> <a href="/logout" rel="external nofollow" >退出</a></div>
    </div>
    <div class="x-sidemenu">
     <accordion close-others="oneAtATime">
      <accordion-group heading="{{menu.text}}" ng-repeat="menu in menus" is-open="$first">
       <div ng-repeat="subMenu in menu.subMenus"><a href="" ng-click=" rel="external nofollow" setContent(subMenu.action)">{{subMenu.text}}</a></div>
      </accordion-group>
     </accordion>
    </div>
    <div class="x-contents">
     <div ng-include="content"></div>
    </div>
  </div>
  <script src="/javascripts/angular-1.4.3.min.js"></script>
  <script src="/javascripts/angular-animate-1.4.3.min.js"></script>
  <script src="/javascripts/ui-bootstrap-tpls-0.13.3.min.js"></script>  
  <script src="/javascripts/bootstrap-admin.js"></script>
 </body>
</html>

你可以和原来的admin.html比较一下,我把class为x-sidemenu的div元素内的item模板,用UI Bootstrap的accordion和accordion-group重写了一下。

accordion定义一个手风琴菜单区域,close-others属性可以指定本区域内的菜单组的展开是否互斥,值为true时,一次只能展开一个菜单组,为false,可以存在多个展开的菜单。(注:这里用菜单一词不太准确,先这么着。)

accordion-group定义手风琴上的可折叠内容,它的heading属性指定折叠区域的标题,is-open属性指定当前菜单是否打开,为true时打开,你在HTML中指定true或false时,是初始值,用户点击后,会改变。你也可以把这个属性和Angular作用域模型中的数据关联在一起。我引用了Angular的ng-repeat指令内置的first属性,由ng−repeat生成的第一个item的first属性值为true。所以我设计的手风琴区域,初始加载时第一个可折叠菜单时打开的。

bootstrap-admin.js

复制原来的admin.js为bootstrap-admin.js,内容修改为下面这样:

angular.module('x-admin', ['ui.bootstrap', 'ngAnimate']).
controller('x-controller', function ($scope, $http) {
 $scope.currentUser="ZhangSan";
 $scope.content = '/welcome.html';
 $scope.oneAtATime = false;

 $scope.menus =[
  {
   text: "系统管理",
   enabled: true,
   subMenus:[
    {
     text: "用户管理",
     enabled: true,
     action:"/admin/addUser"
    },
    {
     text: "角色管理",
     enabled: true,
     action:"/role"    
    },
    {
     text: "权限管理",
     enabled: true,
     action:"/access"    
    }
   ]
  },
  {
   text: "内容管理",
   enabled: true,
   subMenus:[
    {
     text: "直播流监控",
     enabled: true,
     action:"/stream-monitor"
    },
    {
     text: "预约管理",
     enabled: true,
     action:"/book-mgr"    
    }
   ]  
  },
  {
   text: "推送管理",
   enabled: true,
   subMenus:[
    {
     text: "推送列表",
     enabled: true,
     action:"/push-list"
    },
    {
     text: "新增推送",
     enabled: true,
     action:"/add-push"    
    }
   ]  
  }  
 ];

 $scope.setContent = function(action){
  console.log(action);
  $scope.content=action;
 };
});

我给$scope设置了oneAtATime属性,初值为false,HTML中accordion元素的close-others属性和oneAtATime绑定了。所以,最终我们的管理菜单是可以同时打开多个的。

最重要的改动是第一行代码:

angular.module('x-admin', ['ui.bootstrap', 'ngAnimate']).

注入了对ui.bootstrap和ngAnimate两个模块的依赖。

好了,最终在浏览器里打开“http://localhost:3000/bootstrap-admin.html”,效果如下:

Node.js引入UIBootstrap的方法示例

点击内容管理后,效果如下:

Node.js引入UIBootstrap的方法示例

更多UI Bootstrap组件的用法,去看文档喽。更多Angular UI,看这里喽:https://github.com/angular-ui。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 写的个性导航菜单
Dec 24 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
Aug 02 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
javascript实现炫酷的拖动分页
May 11 Javascript
Javascript中常见的逻辑题和解决方法
Sep 17 Javascript
vue实现列表的添加点击
Dec 29 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 Javascript
详解vue中使用protobuf踩坑记
May 07 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 Javascript
Vue watch响应数据实现方法解析
Jul 10 Javascript
Node.js使用Angular简单示例
May 11 #Javascript
Node.js 使用AngularJS的方法示例
May 11 #Javascript
Angular使用动态加载组件方法实现Dialog的示例
May 11 #Javascript
详解JavaScript中的数组合并方法和对象合并方法
May 11 #Javascript
Node.js使用cookie保持登录的方法
May 11 #Javascript
实例解析Vue.js下载方式及基本概念
May 11 #Javascript
AngularJS模态框模板ngDialog的使用详解
May 11 #Javascript
You might like
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
Jquery Change与bind事件代码
2011/09/29 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
python环境路径配置以及命令行运行脚本
2019/04/02 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Python有参函数使用代码实例
2020/01/06 Python
Python print不能立即打印的解决方式
2020/02/19 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
Python类型转换的魔术方法详解
2020/12/23 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
法雷奥SQA(electric)面试问题
2016/01/23 面试题
服装厂厂长职责
2013/12/16 职场文书
优秀求职信范文分享
2013/12/19 职场文书
暑期学习心得体会
2014/09/02 职场文书
政风行风评议整改方案
2014/09/15 职场文书
违章停车检讨书
2014/10/21 职场文书
就业证明函
2015/06/17 职场文书
vue自定义右键菜单之全局实现
2022/04/09 Vue.js
MYSQL常用函数介绍
2022/05/05 MySQL