【发布时间】:2014-07-13 21:11:29
【问题描述】:
我很难找到任何有关通过数据库动态使用 ui-router 的文档。当然,一切都是硬编码的。
我的 Json:
[
{
"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");
});
}]);
我很难动态配置我的视图。有什么想法吗?
更新:
我根据 Radim Köhler 对任何感兴趣的人的回答做了一个Plunker。感谢您的帮助。
我认为 ui-router 是事实上的 Angular 路由器,并且通过动态化,它将使大型应用程序更易于管理。
【问题讨论】:
-
您是否考虑过将数据作为变量传递到页面中直接加载的 js 文件中并避免异步调用来获取它?
-
是的,但这会降低我想要的安全性。您的提议会在浏览器的缓存中留下痕迹。
-
真的不明白为什么它比通过 ajax 调用更安全,尽管在检索数据后也可以手动引导角度
-
如果我对您的理解正确,您建议我使用 db 中的数据创建一个 js 文件并从 js 文件中读取。为什么?为什么要添加资源/时间来打印可以从数据库中读取 str8 的内容?为什么在缓存中有一个js文件供任何人阅读?必须有一种方法可以循环遍历数据库中的 str8 视图。
-
那你的具体问题是什么?我的建议是基于您无法解析
run()并且配置将在您返回数据之前触发,除非您立即有可用数据或手动引导。没有什么能阻止任何人看到数据
标签: angularjs angular-ui-router