Angularjs根据json文件动态生成路由状态的实现方法


Posted in Javascript onApril 17, 2017

项目上有一个新需求,就是需要根据json文件动态生成路由状态,查阅了一下资料,现在总结一下发出来:

首先项目用到的是angular的UI-路由,所以必须引入angular.js和angular-ui-router.js两个js文件,如下例子:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Example</title>
  <script src="bower_components/angular/angular.js"></script>
  <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
  <script src="js/routing.js"></script>
  <script src="js/app.js"></script>
</head>
<body ng-app="App" ng-controller="MainController">
<a ng-click="reload()">reload</a>
<a ui-sref="xxx">xxx</a>
<a ui-sref="yyy">yyy</a>
<div ui-view></div>
</body>
</html>

然后是json文件的一些数据,如下

{  "xxx": {
    "url": "/xxx",
    "templateUrl": "templates/xxx.html"
  },
  "yyy": {
    "url": "/yyy",
    "templateUrl": "templates/yyy.html"
  },
  "ccc": {
    "url": "/ccc",
    "templateUrl": "templates/yyy.html"
  },
  "zzz": {
    "url": "/zzz",
    "templateUrl": "templates/zzz.html"
  }
}

之后定义一个服务,定义个方法用来配置获取json文件的ajax请求的地址,主方法是发送ajax并且对结果进行循环写入路由状态。

'use strict'
angular.module('Routing', ['ui.router'])
  .provider('router', function ($stateProvider) {
    var urlCollection;
    this.$get = function ($http, $state) {
      return {
        setUpRoutes: function () {
          $http.get(urlCollection).success(function (collection) {
            for (var routeName in collection) {
              if (!$state.get(routeName)) {
                $stateProvider.state(routeName, collection[routeName]);
              }
            }
          });
        }
      }
    };
    this.setCollectionUrl = function (url) {
      urlCollection = url;
    }
  })

最后是最关键的angular配置阶段和运行阶段的代码,配置阶段要求至少给出一种状态,如$stateProvider.state('home', {url: '/home',templateUrl: 'templates/home.html'});

并且将默认状态配置好$urlRouterProvider.otherwise('/home');随后调用上面的服务的setCollectionUrl 方法对url地址进行配置,方便发送ajax请求,最后在angular的运行阶段的run方法中调用setUpRoutes方法将json文件的数据根据一定的格式进行状态的动态写入,代码如下:

angular.module('App', ['ui.router', 'Routing'])
  .config(function ($stateProvider, $urlRouterProvider, routerProvider) {
    $stateProvider
      .state('home', {
        url: '/home',
        templateUrl: 'templates/home.html'
      });
    $urlRouterProvider.otherwise('/home');
    routerProvider.setCollectionUrl('js/routeCollection.json');
  })
  .run(function (router) {
    router.setUpRoutes();
  })
;

此,动态获取angular路由状态的例子就介绍完了,感兴趣的可以看下原文地址和原文代码的github,分别如下:

github地址

 github上用git clone下来之后,会看到项目中有个bower.json文件,并且没有上述的两个js文件,我们只需在工程中使用node的包管理器npm下载bower,然后在该项目的命令行中输入bower install 即可下载下来项目要用到的js文件。

以上所述是小编给大家介绍的Angularjs根据json文件动态生成路由状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript静态的url如何传递
May 03 Javascript
解读IE和firefox下JScript和HREF的执行顺序
Jan 12 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
Jul 05 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
Javascript 一些需要注意的细节(必看篇)
Jul 08 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
Apr 21 Javascript
js控制随机数生成概率代码实例
Mar 21 Javascript
vue watch关于对象内的属性监听
Apr 22 Javascript
vue项目中引入vue-datepicker插件的详解
May 14 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 Javascript
Postman环境变量全局变量使用方法详解
Aug 13 Javascript
微信小程序实战之轮播图(3)
Apr 17 #Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 #Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 #Javascript
微信小程序教程系列之新建页面(4)
Apr 17 #Javascript
微信小程序商城项目之淘宝分类入口(2)
Apr 17 #Javascript
微信小程序商城项目之购物数量加减(3)
Apr 17 #Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 #Javascript
You might like
Php部分常见问题总结
2006/10/09 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
python写的ARP攻击代码实例
2014/06/04 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
Django choices下拉列表绑定实例
2020/03/13 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
关于Python解包知识点总结
2020/05/05 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
社会公德演讲稿
2014/05/20 职场文书
干部选拔任用方案
2014/05/26 职场文书
大学生自荐信范文
2015/03/05 职场文书
《静夜思》教学反思
2016/02/17 职场文书
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸