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 相关文章推荐
jquery中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
JS创建自定义表格具体实现
Feb 11 Javascript
web前端开发JQuery常用实例代码片段(50个)
Aug 28 Javascript
chrome调试javascript详解
Oct 21 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
Oct 23 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
Mar 30 Javascript
jQuery中的ready函数与window.onload谁先执行
Jun 21 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
JS判断数组是否包含某元素实现方法汇总
Jun 24 Javascript
vue中echarts引入中国地图的案例
Jul 28 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手册及PHP编程标准
2006/12/17 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
js实现横向拖拽导航条功能
2017/02/17 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
在python shell中运行python文件的实现
2019/12/21 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python如何生成xml文件
2020/06/04 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
详解CSS3的图层阴影和文字阴影效果使用
2016/06/09 HTML / CSS
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
海量信息软件测试笔试题
2015/08/08 面试题
松材线虫病防治方案
2014/06/15 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
化验员岗位职责
2015/02/14 职场文书
预备党员介绍人意见
2015/06/01 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
酒店厨房管理制度
2015/08/06 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python