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 相关文章推荐
DHTML 中的绝对定位
Nov 26 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
easyui Draggable组件实现拖动效果
Aug 19 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
Dec 12 Javascript
Bootstrap布局方式详解
May 27 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
Dec 07 Javascript
javascript 的变量、作用域和内存问题
Apr 19 Javascript
ES6中参数的默认值语法介绍
May 03 Javascript
vuex与组件联合使用的方法
May 10 Javascript
vue实现条件判断动态绑定样式的方法
Sep 29 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
php 归并排序 数组交集
2011/05/10 PHP
php学习之 数组声明
2011/06/09 PHP
PHP查询快递信息的方法
2015/03/07 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
php实现简单加入购物车功能
2017/03/07 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
2020/06/24 Javascript
python基础教程项目二之画幅好画
2018/04/02 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
浅析Python 序列化与反序列化
2020/08/05 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
人事部主管岗位职责
2013/12/26 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
霸气队列口号
2014/06/18 职场文书
小学开学标语
2014/07/01 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
2014年团工作总结
2014/11/27 职场文书
年底个人总结范文
2015/03/10 职场文书
Go中的条件语句Switch示例详解
2021/08/23 Golang
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
Python Pandas解析读写 CSV 文件
2022/04/11 Python