当前位置: 首页 > news >正文

在 AngularJS 应用中通过 JSON 文件来设置状态 【已翻译100%】

想象一个使用简单的angular UI路由的 angularjs 应用:

<!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/app.js"></script>

</head>
<body ng-app="App" ng-controller="MainController">

<div ui-view></div>
</body>
</html>
angular.module('App', ['ui.router'])

    .config(function ($stateProvider, $urlRouterProvider, routerProvider) {
        $stateProvider
            .state('home', {
                url: '/home',
                templateUrl: 'templates/home.html'
            });

        $urlRouterProvider.otherwise('/home');
    })

    .controller('MainController', function ($scope, router) {
        $scope.reload = function() {
            router.setUpRoutes();
        };
    })
;

我们仅定义了一个称为 'home'的状态。如果我们需要更多的状态,只需要在 config() 增加更多的function即可。在这篇文章中,我们将会使用JSON文件方式添加更多的状态,而不是在代码中去写死。

下面是我们在JSON中定义的状态:

{

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

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

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

现在我们的应用变成这样了:

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');
    })

    .controller('MainController', function ($scope, router) {
        $scope.reload = function() {
            router.setUpRoutes();
        };
    })
;

我们可以看到现在正在使用 'Routing'

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;
        }
    })

    .run(function (router) {
        router.setUpRoutes();
    });

'Routing' 提供了一个叫做 'router' 的provider方法可以获取到JSON文件并构建各种状态。

这是一个设想的证明过程。

还有一些问题 (如果你知道怎么解决请告诉我):

  • 直到我们从一个http请求加载了各种状态为止, angular 应用在加载的时候没有得到所有的状态, 所以我们要使用老的方式至少加载第一个状态。
  • 我们可以在应用运行的时候重新加载状态。我们可以新加状态,但是我们没法改变已经存的的状态。

你可以在我的 github 帐户上看例子。

相关文章:

  • 一款基于jQuery的漂亮弹出层
  • uva 12230 Crossing Rivers
  • 51nod 1010 只包含因子2 3 5的数 二分答案
  • iOS10App如何跳转到系统设置转
  • IPv4检验和计算
  • vue总结
  • java虚拟机:class文件结构
  • tomcat7线程池配置
  • JS中typeof和instanceof用法区别
  • JS中闭包、函数与对象的介绍和用法
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • 从零开始学习Vue(一)
  • 从零开始学习Vue(三)
  • jmeter使用BeanShell断言
  • 裁掉你的前端吧,切版网帮你解决
  • 时间复杂度分析经典问题——最大子序列和
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • gcc介绍及安装
  • Gradle 5.0 正式版发布
  • IOS评论框不贴底(ios12新bug)
  • Linux后台研发超实用命令总结
  • markdown编辑器简评
  • mongo索引构建
  • React-flux杂记
  • Redis字符串类型内部编码剖析
  • spark本地环境的搭建到运行第一个spark程序
  • spring boot下thymeleaf全局静态变量配置
  • springboot_database项目介绍
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • ubuntu 下nginx安装 并支持https协议
  • Vue--数据传输
  • 分布式熔断降级平台aegis
  • 分享几个不错的工具
  • 世界上最简单的无等待算法(getAndIncrement)
  • 学习ES6 变量的解构赋值
  • 一些css基础学习笔记
  • 1.Ext JS 建立web开发工程
  • 阿里云移动端播放器高级功能介绍
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #1014 : Trie树
  • #HarmonyOS:基础语法
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1)Android开发优化---------UI优化
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (超详细)语音信号处理之特征提取
  • (实战篇)如何缓存数据
  • (小白学Java)Java简介和基本配置
  • (转)Oracle存储过程编写经验和优化措施
  • .“空心村”成因分析及解决对策122344
  • .Net Core 中间件验签
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调