我很难找到有关通过数据库动态使用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()
如下:
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");
});
}]);
在这里检查所有动作
问题内容: 我有如下配置: 玉器主锉 因此,模块将填充到占位符中。但是问题是,我在模板中还有2个命名视图。模板如下所示: leftSidePaneModule.html 如何使模块和在被填充到上述占位? 我试过了, 尝试次数:2 两者都不起作用。 你怎么做呢? 谢谢! 问题答案: 解决方案可在此处找到:视图名称-相对名称与绝对名称。引用: 在幕后,每个视图都被分配一个遵循的方案的绝对名称,其中指令
我的配置如下所示: 主玉锉 因此,模块被填充到ui-view='leftSidePaneModule占位符中。但问题是,我在模板中有2个命名的视图。 leftSidePaneModule。html 如何制作模块 我试过了, 尝试: 2 两者都不起作用。 你是怎么做到的? 谢谢
问题内容: 我目前有一个内置路由的AngularJS应用程序。它可以正常工作,并且一切正常。 我的app.js文件如下所示: 我的应用程序内置了CMS,您可以在其中复制 / pages 目录中的新html文件并添加新的html文件。 即使对于新动态添加的文件,我仍然希望通过路由提供程序。 在理想的情况下,路由模式为: $ routeProvider.when(’/ pagename ‘,{temp
问题内容: 我正在建立一个带有角度UI路由器的静态HTML网站进行导航。我基本上有一个带有多个(10+)html模板(页面)的ui视图,可以加载到该视图中。我所有的模板页面都位于名为“页面”的目录中。 所以我基本上想知道我们是否可以在$ stateProvider中仅定义一个状态来动态分配多个模板url,而不是为每个HTML模板页面编写不同的状态(如下所述)。 任何帮助深表感谢。 问题答案: 那应
问题内容: 我有一个如下所示的route.js: 考虑到我要创建200多种不同的路线,最终我会遇到诸如“ article1”,“ article2”等内容 而我的app.js就像: 有没有动态的方式来创建这个? 问题答案: 终于成功了。 在我遇到的情况下,第1条,第2条等: 在获得多级网址的情况下,我创建了一个自定义函数:
问题内容: 我正在尝试测试一些视图,这些视图用于链接到应用程序中的其他状态。在我的测试中,我触发了对此元素的点击,如下所示: 如果状态切换为,该如何测试?在我的控制器中像这样使用时,这很容易: 但是当我使用时,我不知道要监视什么对象。如何验证我的应用程序处于正确状态? 问题答案: 我自己找到的。在查看了角度ui路由器源代码后,我在指令中找到了以下行: 当元素收到点击时,会包装在回调中。因此,在测试