我很难找到有关通过数据库动态使用ui路由器的任何文档。当然,所有内容都经过硬编码。
我的杰森:
[ { "name": "root", "url": "/", "parent": "", "abstract": true, "views": [ {"name": "header", "templateUrl": "/app/views/header.html"}, {"name" :"footer", "templateUrl": "/app/views/footer.html" } ] }, { "name": "home", "url": "", "abstract" : false, "parent": "root", "views": [ {"name": "container@", "templateUrl": "/app/views/content1.html"}, {"name" :"left@", "templateUrl": "/app/views/left1.html" } ] }, { "name": "about", "url": "/about", "abstract": false, "parent": "root", "views": [ {"name": "container@", "templateUrl": "/app/views/content2.html"}, {"name" :"left@", "templateUrl": "/app/views/left2.html" } ] } ]
我的应用程式:
'use strict'; var $stateProviderRef = null; var $urlRouterProviderRef = null; var app = angular.module('app', ['ngRoute', 'ui.router']); app.factory('menuItems', function ($http) { return { all: function () { return $http({ url: '/app/jsonData/efstates.js', method: 'GET' }); } }; }); app.config(function ($locationProvider, $urlRouterProvider, $stateProvider) { $urlRouterProviderRef = $urlRouterProvider; $stateProviderRef = $stateProvider; $locationProvider.html5Mode(false); $urlRouterProviderRef.otherwise("/"); }); app.run(['$q', '$rootScope', '$state', 'menuItems', function ($q, $rootScope, $state, menuItems) { menuItems.all().success(function (data) { angular.forEach(data, function (value, key) { $stateProviderRef.state(name = value.name, { "url": value.url, "parent" : value.parent, "abstract": value.abstract, "views": { // do not want the below hard coded, I want to loop // through the respective json array objects and populate state & views // I can do this with everything but views. // first loop 'header': { 'templateUrl': '/app/views/header.html' }, 'footer': { 'templateUrl': '/app/views/footer.html' }, // second loop 'left@': { 'templateUrl': '/app/views/left1.html' }, 'container@': { 'templateUrl': '/app/views/container1.html' }, // third loop 'left@': { 'templateUrl': '/app/views/left2.html' }, 'container@': { 'templateUrl': '/app/views/container2.html' }, } }); }); $state.go("home"); }); }]);
我很难动态配置视图。有任何想法吗?
更新:
我根据RadimKöhler 的回答做了一个Plunker。感谢您的帮助。
我认为ui-router是defacto路由器,它具有动态性,它将使大型应用程序更易于管理。
有一个显示我们如何动态配置视图的插件。的更新版本.run()如下:
.run()
app.run(['$q', '$rootScope', '$state', '$http', function ($q, $rootScope, $state, $http) { $http.get("myJson.json") .success(function(data) { angular.forEach(data, function (value, key) { var state = { "url": value.url, "parent" : value.parent, "abstract": value.abstract, "views": {} }; // here we configure the views angular.forEach(value.views, function (view) { state.views[view.name] = { templateUrl : view.templateUrl, }; }); $stateProviderRef.state(value.name, state); }); $state.go("home"); }); }]);
在这里检查所有动作