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 相关文章推荐
ExtJs Excel导出并下载IIS服务器端遇到的问题
Sep 16 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
Oct 25 Javascript
jQuery 仿百度输入标签插件附效果图
Jul 04 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
2014年50个程序员最适用的免费JQuery插件
Dec 15 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
Vuejs第十二篇之动态组件全面解析
Sep 09 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
Oct 21 Javascript
浅谈js函数的多种定义方法与区别
Nov 29 Javascript
原生JS获取元素的位置与尺寸实现方法
Oct 18 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
Jun 15 Javascript
layui 中select下拉change事件失效的解决方法
Sep 20 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连mysql和oracle数据库性能比较
2006/10/09 PHP
PHP5 面向对象程序设计
2008/02/13 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
2011/12/29 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
python编程嵌套函数实例代码
2018/02/11 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
python上selenium的弹框操作实现
2020/07/13 Python
Django数据库迁移常见使用方法
2020/11/12 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
实现strstr功能,即在父串中寻找子串首次出现的位置
2016/08/05 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
感恩节活动方案
2014/01/27 职场文书
乡下人家教学反思
2014/02/01 职场文书
函授生自我鉴定
2014/03/25 职场文书
营销计划书范文
2015/01/17 职场文书