angular js根据json文件动态生成路由状态
项目上有一个新需求,就是需要根据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上用git clone下来之后,会看到项目中有个bower.json文件,并且没有上述的两个js文件,我们只需在工程中使用node的包管理器npm下载bower,然后在该项目的命令行中输入bower install 即可下载下来项目要用到的js文件。
angular js根据json文件动态生成路由状态的更多相关文章
- js将json数据动态生成表格
		今天开发中遇到需要展示动态数据的问题, 具体要求是后端传来的json字符串,要在前端页面以table表格的形式展示, 其实没啥难的,就是拼接table标签,纯属体力活,于是自己写了个呆萌,保存起来,以 ... 
- .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)
		.net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml) 首先设置 Startup.cs 文件 配置 ConfigureServices services .Add ... 
- 初探原生js根据json数据动态创建table
		初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ... 
- 使用maven根据JSON文件自动生成Java POJO类(Java Bean)源文件
		根据JSON文件自动生成Java POJO类(Java Bean)源文件 本文介绍使用程序jsonschema2pojo来自动生成Java的POJO类源文件,本文主要使用maven,其他构建工具请参考 ... 
- js  vs2013中允许js访问json文件的解决方案
		js vs2013中允许js访问json文件的解决方案 <?xml version="1.0" encoding="utf-8"?> <!- ... 
- Angular  Npm  Package.Json文件详解
		Angular7 Npm Package.Json文件详解 近期时间比较充裕,正好想了解下Angular Project相关内容.于是将Npm官网上关于Package.json的官方说明文档进行了 ... 
- FileSaver.js导出json文件和文本
		最近刚刚写了个json数据导出生成Excel文件的,顺便总结下利用FileSaver.js导出其他文件的,这里要注意的一个点就是,当导出的是json文件或是txt文件时,导出的内容要是字符串,特别当时 ... 
- 跨域jsonp+jQuery+json+html动态生成表格
		1.什么是跨域 浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了. 凡是拥有scr这个属性 ... 
- JS读取json 文件
		json文件是一种轻量级的数据交互格式.一般在jquery中使用getJSON()方法读取. $.getJSON(url,[data],[callback]) url:加载的页面地址 data: 可选 ... 
随机推荐
- How to Use Convolutional Neural Networks for Time Series Classification
			How to Use Convolutional Neural Networks for Time Series Classification 2019-10-08 12:09:35 This blo ... 
- mysql判断表字段或索引是否存在,然后修改
			判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGI ... 
- iobit-unlocker --- 类似 Unlocker 工具,强制删除文件或文件夹
			win10 使用 Unlocker 1.9.2 常有问题,以前在win7上使用完全ok的 更换成:iobit-unlocker ,win10体验还可以,类似Unlocker 下载地址: https:/ ... 
- VUE-013-为elementUI 设置 tootip 宽度
			在表格显示列表中,通常添加 :show-overflow-tooltip="true" 以显示不能完全展示的单元格文案提示.单通常显示为全屏宽度,不易查看,可通过设置全局的样式,进 ... 
- Python3基础 None 使用is来判断
			Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ... 
- SpringBoot 上下文获取注入的Bean
			import org.springframework.beans.BeansException; import org.springframework.context.ApplicationConte ... 
- Docker管理控制相关资源
			一台宿主机可以放多个容器,默认的情况下,Docker 没有对容器进行硬件资源的限制,当容器负载过高时会尽可能的占用宿主机资源,所以有时候我们需要对容器的资源使用设置一个上限,这里就需要管理 Docke ... 
- nginx入门系列之应用场景介绍
			目录 HTTP服务器 反向代理服务器 作为一个虚拟主机下多个应用的反向代理 作为多个虚拟主机的反向代理 负载均衡器 简单轮训策略 最小连接数策略 客户端IP哈希策略 服务器权重策略 邮件代理服务器 官 ... 
- centos7安装配置MariaDB10
			1:添加 MariaDB yum 仓库 vi /etc/yum.repos.d/MariaDB.repo在该文件中添加以下内容保存: [mariadb] name = MariaDB baseurl ... 
- oracle python操作 增删改查
			oracle删除 删除表内容 truncate table new_userinfo; 删除表 drop table new_userinfo; 1.首先,python链接oracle数据库需要配置好 ... 
