浅析angularJS中的ui-router和ng-grid模块


Posted in Javascript onMay 20, 2016

在家里闲着无聊,正好在网上找到了一个关于angular的教程,学习了一下angular的ui-router和ng-grid这两个模块,顺便模仿着做了一个小小的东西。

代码已经上传到github上,地址在这里哟https://github.com/wwervin72/Angular。

有兴趣的小伙伴可以看看。那么然后这里我们就先来了解一下这两个模块的用法。

我们先来说说ui-router这个模块,这个模块主要是用来实现深层次的路由的。其实angular有个内置的指令ng-route,如果在项目中没有嵌套问题的话,那么用这个指令来实现页面之间的跳转也还是蛮方便的,但是他的短板就在于,他拿深层次的嵌套路由没有任何办法。那么首先,我们要使用这个模块我们就需要把他给下载下来。

下载地址在这里http://www.bootcdn.cn/angular-ui-router/。

下载下来之后,我们就可以把它导入进我们的项目中了,这里要注意下,因为这个模块式基于angular的,所以在这之前,我们还需要导入angular的js文件。这个可以在angular的官网去下载。

那么在上面的准备工作都做完了之后,我们就可以来动手写我们的代码了。

HTML部分

<div class="container">
 <div ui-view>

 </div>
</div>

这里有一点要注意下,div里面添加的属性不再是ng-view了,而是ui-view。

JS部分

var app=angular.module('app',['ui.router','loginModel','listModel']);

app.config(function ($stateProvider, $urlRouterProvider) {
 $urlRouterProvider.otherwise('/index');
 $stateProvider
 .state('index',{
  url: '/index',
  templateUrl: 'tpls/start.html'
 })
 .state('register',{
  url: '/register',
  templateUrl: 'tpls/register.html'
 })
 .state('main',{
  url: '/main{positionType:[0,9]{1,5}}',
  views: {
  '': {
   templateUrl: 'tpls/main.html'
  },
  'typeList@main': {
   templateUrl: 'tpls/typeList.html'
  },
  'tbHero@main': {
   templateUrl: 'tpls/tbHero.html'
  }
  }
 })
 .state('addHero',{
  url: '/addHero',
  templateUrl: 'tpls/addHero.html'
 })
 .state('find',{
  url: '/findPwd',
  templateUrl: 'tpls/findPwd.html'
 })
 .state('detail',{
  url: '/detail/:id',
  templateUrl: 'tpls/detail.html'
 })
})

这里有三个地方需要注意:

1、是在进行嵌套的时候,我这里最外层是main部分,然后里面嵌套了typeList和tbHero部分,我们需要注意下这里的写法。

2、当我们需要根据选择不同打开不同的内容时,也就是需要向下一个页面传参数,我这里是detail部分,我们也需要多注意下这里的写法。

3、在我们利用angular.module创建一个app应用的时候,我们需要在里面导入ui.router模块,另外我们自己创建的一些模块也需要在这里导入进去。

4、我们这里使用$stateProvider来配置路由了,而不是$routeProvider了,还有就是这里使用的state而不是when。

这里吧路由配置好了之后,剩下的就是写tpls中各个部分的代码了,这里就不做过多的介绍,这里最重要的就是路由的配置。

好了下面我们再来看看ng-grid的用法,这里是下载地址http://www.bootcdn.cn/ng-grid/。

HTML部分

main部分

<div class="row">
 <div class="col-sm-2" ui-view="typeList">

 </div>
 <div class="col-sm-10" ui-view="tbHero">

 </div>
</div>

typeList部分

<div class="row">
 <div class="col-sm-12">
 <div class="list-group">
  <a href="javascript:void(0);" class="list-group-item active">英雄定位类型</a>
  <a ui-sref="main({positionType:0})" class="list-group-item">全部定位</a>
  <a ui-sref="main({positionType:1})" class="list-group-item">射手</a>
  <a ui-sref="main({positionType:2})" class="list-group-item">中单</a>
  <a ui-sref="main({positionType:3})" class="list-group-item">上单</a>
  <a ui-sref="main({positionType:4})" class="list-group-item">打野</a>
  <a ui-sref="main({positionType:5})" class="list-group-item">辅助</a>
 </div>
 </div>
</div>

tbHero部分

<div ng-controller="listCtrl">
 <div class="row">
 <div class="col-sm-3">
  <button class="btn btn-success" ui-sref="addHero()">添加英雄</button>
  <button class="btn btn-warning" ui-sref="index()">退出</button>
 </div>
 <div class="col-sm-9">
  <form class="form-horizontal">
  <input type="text" ng-model="filterOptions.filterText" placeholder="请输入查询关键字..." class="form-control searchText"/>
  </form>
 </div>
 </div>
 <div class="row">
 <div class="col-sm-12">
  <div class="gridStyle" ng-grid="gridOptions">

  </div>
 </div>
 </div>
</div>

JS部分

var listModel = angular.module('listModel',['ngGrid']);
listModel.controller('listCtrl',['$scope','$http','$state','$stateParams', function ($scope, $http, $state, $stateParams) {

 $scope.pagingOptions = {
 pageSizes: [5,15,20],
 pageSize: 5,
 currentPage: 1
 };

 $scope.filterOptions = {
 filterText: '',
 useExternalFilter: true
 };

 $scope.totalServerItems = 0;
 $scope.getDates = function (pageSize,page,/*optional*/searchText) {
 setTimeout(function () {
  if(searchText){
  searchText = searchText.toLowerCase();
  $http.get('data/hero.php?param='+$stateParams.positionType).success(function (data) {
   var data = data.filter(function (item) {
   return JSON.stringify(item).indexOf(searchText) != -1;
   })
   data.forEach(function (item,i) {
   item.index = i+1;
   });
   $scope.totalServerItems = data.length;
   $scope.datas=data.slice((page-1)*pageSize,page*pageSize);
  }).error(function (data) {
   alert('请求错误...');
  })
  }else{
  $http.get('data/hero.php?param='+$stateParams.positionType).success(function (data) {
   data.forEach(function (item,i) {
   item.index = i+1;
   });
   $scope.totalServerItems = data.length;
   $scope.datas = data.slice((page-1)*pageSize,page*pageSize);
  }).error(function (data) {
   alert('请求错误...');
  })
  }
 },100);
 };
 $scope.getDates($scope.pagingOptions.pageSize,$scope.pagingOptions.currentPage);
 $scope.$watch('pagingOptions', function () {
 $scope.getDates($scope.pagingOptions.pageSize,$scope.pagingOptions.currentPage);
 },true);
 $scope.$watch('filterOptions', function () {
 $scope.getDates($scope.pagingOptions.pageSize,$scope.pagingOptions.currentPage,$scope.filterOptions.filterText);
 },true);

 $scope.gridOptions = {
 data: 'datas',  //表格中显示的数据来源
 multiSelect: false, //是否能多选
 enableRowSelection: false, //是否能选择行
 enableCellSelection: true, //是否能选择单元格
 enableCellEdit: false, //是否能修改内容
 enablePinning: true,  //是否被锁住了
 columnDefs: [
  {
  field: 'index', //这里是数据中的属性名
  width: 80,
  display: '序号', //这里是表格的每一列的名称
  pinnable: true,
  sortable: true  //是否能排序
  }, 
  {
  field: 'name',
  displayName: '姓名',
  width: 120,
  sortable: true,
  pinnable: true
  },
  {
  field:'alias',
  displayName:'别名',
  width: 60,
  sortable: true,
  pinnable: true
  },
  {
  field:'position',
  displayName: '定位',
  width: 70,
  sortable: true,
  pinnable: true
  },
  {
  field:'equip',
  displayName: '装备',
  width: 500,
  sortable: true,
  pinnable: true
  },
  {
  field:'id',
  displayName: '详细攻略',
  sortable: false,
  pinnable: true,
  cellTemplate:'<div class="cellDetail"><a ui-sref="detail({id:row.getProperty(col.field)})" id="{{row.getProperty(col.field)}}">详情</a></div>'
  }
 ],
 enablePaging: true, //是否能翻页
 showFooter: true,  //是否显示表尾
 totalServerItems: 'totalServerItems', //数据的总条数 
 pagingOptions: $scope.pagingOptions, //分页部分
 filterOptions: $scope.filterOptions  //数据过滤部分
 }
}])

这里最重要的就是$scope.gridOptions这一块了,同时我们需要多注意下最后一个详细攻略里面,传参数的写法。

下面附上几张效果图:

下面附上几张效果图:

浅析angularJS中的ui-router和ng-grid模块

浅析angularJS中的ui-router和ng-grid模块

浅析angularJS中的ui-router和ng-grid模块

另外在这里面还用到的关于angular表单验证、service、向导、php等方面的内容这里就不做过多介绍了,如果有哪里写的不对的地方,万望留言告知,谢谢^_^。

以上这篇浅析angularJS中的ui-router和ng-grid模块就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断是否输入完毕再激活提交按钮
Jun 26 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
js截取中英文字符串、标点符号无乱码示例解读
Apr 17 Javascript
DOM基础教程之使用DOM + Css
Jan 20 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
javascript中FOREACH数组方法使用示例
Mar 01 Javascript
echarts3 使用总结(绘制各种图表,地图)
Jan 05 Javascript
利用JS做网页特效_大图轮播(实例讲解)
Aug 09 Javascript
纯js实现页面返回顶部的动画(超简单)
Aug 10 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
Sep 18 Javascript
JavaScript自定义超时API代码实例
Apr 30 Javascript
javascript的理解及经典案例分析
May 20 #Javascript
JS中对象与字符串的互相转换详解
May 20 #Javascript
JS 对象(Object)和字符串(String)互转方法
May 20 #Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 #Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 #Javascript
深入理解JS addLoadEvent函数
May 20 #Javascript
用jQuery获取table中行id和td值的实现代码
May 19 #Javascript
You might like
解析php中如何直接执行SHELL
2013/06/28 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
一段实用的php验证码函数
2016/05/19 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
微信小程序实战之登录页面制作(5)
2020/03/30 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
在Django中管理Users和Permissions以及Groups的方法
2015/07/23 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
浅谈pycharm出现卡顿的解决方法
2018/12/03 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
物流管理应届生求职信
2013/11/07 职场文书
设备售后服务承诺书
2014/05/30 职场文书
村党组织公开承诺书
2015/04/30 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android