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 相关文章推荐
js通过googleAIP翻译PHP系统的语言配置的实现代码
Oct 17 Javascript
jquery插件制作简单示例说明
Feb 03 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
Sep 10 Javascript
js实现div的切换特效上一个下一个
Feb 11 Javascript
jquery等待效果示例
May 01 Javascript
Javascript的&amp;&amp;和||的另类用法
Jul 23 Javascript
Javascript实现飞动广告效果的方法
May 25 Javascript
JavaScript中调用函数的4种方式代码实例
Jul 08 Javascript
JS日期格式化之javascript Date format
Oct 01 Javascript
浅谈键盘上回车按钮的js触发事件
Feb 13 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
Jul 24 Javascript
Vue 样式切换及三元判断样式关联操作
Aug 09 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
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
angularjs基础教程
2014/12/25 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
详解Document.Cookie
2015/12/25 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
python中的多重继承实例讲解
2014/09/28 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
python获取多线程及子线程的返回值
2017/11/15 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
python图形用户接口实例详解
2019/12/16 Python
Python项目打包成二进制的方法
2020/12/30 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
高三体育教学反思
2014/01/29 职场文书
大学生党员承诺书
2014/05/20 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS