在 AngularJS 应用中通过 JSON 文件来设置状态
想象一个使用简单的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 帐户上看例子。
本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!