URL路由到子视图
URL Routing to Child View
我设置了一个父视图和多个子视图,它似乎在应用程序中工作没有问题。问题是如果您刷新页面或尝试使用适当的url直接转到子视图。
这里是我正在加载的状态。这是父状态:
{name: "myTeam", url: "/myTeam", template: "<my-team></my-team>"}
这是其中一个孩子:
{name: "myTeam.info", url: "/info", template: "<my-team.info></my-team.info>"}
这是另一个:
{name: "myTeam.checkin", url: "/checkin/{book}/{club}/{team}/{bus}", template: "<my-team.checkin></my-team.checkin>"}
所以,如果我访问Info视图,它会正确加载模板并将url设置为"/myTeam/Info "。如果尝试刷新页面或者只是从url "/myTeam/info"开始,它不会加载state/模板。
我在angular-ui-router.js(0.1.2版本)中添加了代码来尝试调试。我在912行添加了console.log()行。
UrlMatcher.prototype.exec = function (path, searchParams) {
var m = this.regexp.exec(path);
console.log(" --> " + this.regexp + " -- " + path + " = " + m);
if (!m) return null;
searchParams = searchParams || {};
输出如下:
--> /^'/myTeam'/?$/ -- /myTeam/info = null
--> /^'/info(.*)?'/?$/ -- /myTeam/info = null
--> /^'/checkin'/([^'/]*)?'/([^'/]*)?'/([^'/]*)?'/([^'/]*)?(.*)?'/?$/ -- /myTeam/info = null
它在父结点和子结点上都不匹配。
我遵循嵌套状态和嵌套视图的例子。他们的网址看起来都一样。
我不知道它有什么不同,但我使用UI额外的加载这些作为未来的状态,并使用ocLazyLoad.
关于如何让URL工作的任何想法?或者,它应该如何工作?
我最终确定问题出在UI Extras和未来状态加载上。
为了时间的缘故,我最后选择了一条轻松的路。我改变了我的项目,不使用任何子状态,这就解决了我的问题。据我所知,它并没有加载所有的子状态。未来的状态加载器只匹配父节点并加载父节点。
我认为我的问题与我在这里发现的问题相似:UI Router extra Issue #63
我试图在我的未来状态加载器中编写代码,以加载父状态及其所有子状态。这迫使我不得不修改UI Router Extras来接受一系列的承诺,我不得不修改太多的东西来使它工作。
希望在某个时候,我可以尝试在我的项目之外构建一个更完整的修复并贡献它,但现在,我的解决方案是避免子状态。
奇怪,我的项目有子状态,有些子状态也有更多的子状态,它工作得很好,没有问题,我将向你展示我如何设置我的url:
dashboardState.js
状态与url: ''
是主页,它是加载时,你导航到url/home,但他们的孩子home加载在仪表板。
(function () {
'use strict';
angular
.module('myapp')
.config(dashboardStates);
function dashboardStates($stateProvider) {
var dashboard = {
name: 'dashboard',
abstract: true,
url: '/home', // view inicial abaixo
templateUrl: 'app/components/Dashboard/view/dashboard.html',
controller: 'DashboardController',
controllerAs: 'dashboard'
};
var dashboardHome = {
name: 'dashboard.home',
url: '',
parent: 'dashboard',
templateUrl: 'app/components/Dashboard/view/dashboard.home.html',
controller: 'DashboardController',
controllerAs: 'home',
ncyBreadcrumb: {
label: 'Home'
}
};
// states
$stateProvider
.state(dashboard)
.state(dashboardHome);
}
}());
和下面的状态加载在仪表板视图中:
profileState.js
(function () {
'use strict';
angular
.module('myapp')
.config(profileStates);
function profileStates($stateProvider) {
var profile = {
name: 'dashboard.profile',
url: '/profile',
templateUrl: 'app/components/Profile/view/profile.html',
controller: 'ProfileController',
controllerAs: 'profile'
};
var profileEdit = {
name: 'dashboard.profile.edit',
url: '/edit',
templateUrl: 'app/components/Profile/view/profile.edit.html',
controller: 'ProfileController',
controllerAs: 'profile'
};
$stateProvider
.state(profile)
.state(profileEdit);
}
}());
更多信息:https://github.com/angular-ui/ui-router/wiki/Nested-States-and-Nested-Views
- 正在使用$location.path(.)路由ng视图
- 发送json对象或使用express路由呈现视图
- 当在ng视图中加载新路由时,Tabbing(tabindex)针对错误的元素
- ui路由器中基于查询的同级视图路由
- UI5 路由不实例化视图
- Angularjs UI视图和Rails服务器端模板路由
- 无法在MEAN应用程序中路由到部分视图
- 在backbone.js中路由视图时传递一个参数
- ng视图路由模板是否反映了ajax请求所做的更改
- Ember.js - CRUD 方案 - 指定从路由内的视图
- 如何在 Express.js 中为路由的子路径呈现不同的视图
- 快速 - 路由中间件 如何确定响应视图是否已呈现
- 如何在角度 JS 路由中保留模板视图
- AngularJS:使用路由记住复杂视图的状态/设置
- 使用主干.js中的路由管理单页应用程序中的多个视图实例
- 角度路由未填充 ng 视图
- AngularJs 路由不再工作.地址栏更改,但视图不会更改
- 在带有视图(路由)的 AngularJS 中,为什么控制器只向前执行
- 跨模板和视图路由的基本元素绑定,Angular JS
- Backbone.js:为嵌套视图路由