Angularjs 角度Ui路由器,嵌套命名视图-我做错了什么?
我正在尝试使用ui路由器使用嵌套命名视图实现一个非常简单的示例,但我无法让它工作。如果有人能看看这个JSFIDLE——告诉我我做错了什么,我将不胜感激 其基本思想是: -My index.html只有一个ui视图 -插入的模板具有两个命名的ui视图 -我正在尝试设置配置以使用模板填充这两个ui视图,但无法使其正常工作 这是小提琴的核心(模板中的尖括号替换为[]): 我已经调整了好几个小时了(尝试绝对名称等),我快要发疯了。根据文档(至少对我来说)它看起来不错,但是没有任何简单的例子,我肯定遗漏了一些明显的东西 更新 通过从测试状态中删除url并将url:“”添加到test.subs状态,它可以正常工作。但将任何url添加到测试状态会导致它再次失败。在我的真实场景中,这些状态都不是根状态,父状态中根本没有url会导致工作不正常。就好像那个状态没有被激活一样。根据文档,在子文件中包含url:“”应该会导致它与其父状态一起被激活,但实际情况并非如此 更新-解决方案Angularjs 角度Ui路由器,嵌套命名视图-我做错了什么?,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我正在尝试使用ui路由器使用嵌套命名视图实现一个非常简单的示例,但我无法让它工作。如果有人能看看这个JSFIDLE——告诉我我做错了什么,我将不胜感激 其基本思想是: -My index.html只有一个ui视图 -插入的模板具有两个命名的ui视图 -我正在尝试设置配置以使用模板填充这两个ui视图,但无法使其正常工作 这是小提琴的核心(模板中的尖括号替换为[]): 我已经调整了好几个小时了(尝试绝对名称等),我快要发疯了。根据文档(至少对我来说)它看起来不错,但是没有任何简单的例子,我肯定遗漏了
对于任何想要查看它的人-在“测试”状态中添加“abstract:true”。如果随后转换到test.subs,您将看到子视图。上述代码中有两个问题:
test.sub
状态中添加url:“
”
使用空url意味着当
它的父url被导航到
angular.module('myApp', ['ui.state'])
.config(['$stateProvider', '$routeProvider',
function ($stateProvider, $routeProvider) {
$stateProvider
.state('test', {
abstract: true,
url: '',
views: {
'main': {
template: '<h1>Hello!!!</h1>' +
'<div ui-view="view1"></div>' +
'<div ui-view="view2"></div>'
}
}
})
.state('test.subs', {
url: '',
views: {
'view1': {
template: "Im View1"
},
'view2': {
template: "Im View2"
}
}
});
}])
.run(['$rootScope', '$state', '$stateParams', function ($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
// $state.transitionTo('test');
}]);
angular.module('myApp',['ui.state']))
.config(['$stateProvider','$routeProvider',
函数($stateProvider,$routeProvider){
$stateProvider
.状态(“测试”{
摘要:没错,
url:“”,
观点:{
“主要”:{
模板:“你好!!!”+
'' +
''
}
}
})
.state('test.subs'{
url:“”,
观点:{
“视图1”:{
模板:“Im视图1”
},
“视图2”:{
模板:“Im视图2”
}
}
});
}])
.run(['$rootScope','$state','$stateparms',函数($rootScope,$state,$stateparms){
$rootScope.$state=$state;
$rootScope.$stateParams=$stateParams;
//$state.transitiono('test');
}]);
这不起作用。这使得“你好!!!”也消失了。您可以在jsFiddle中尝试它。在我的例子中,测试状态应该并且需要被激活。而且,也许我不清楚。没有“转换到子视图”。我希望SUB在初始页面加载时显示。也许这就是我的问题所在。当用户转到“/”站点的根目录时,所有内容都应该是可见的——“Hello!!!”,以及“Im View1”和“Im View2”。无论有无摘要:true,这都不起作用。这是我之前尝试过的众多调整之一。玩JSFIDLE。衷心的祝贺等待着任何能让它工作的人:)好的,所以如果我根本不添加摘要,从测试状态中删除url并将其添加到test.subs状态,它“工作”。一切都显示出来了,但我觉得还是有问题。在我的真实代码中,曾经在该控制器中工作的代码不再工作(我调用端点,但什么也没发生)。我需要的是两个状态都处于活动状态,或者以某种方式将它们组合成一个状态。查看这一点的一种简单方法是将测试状态设置为除“url:”,子状态设置为“url:”。它再次完全停止工作(子视图不显示)。@TimHardy查看我的更新代码。如果需要激活这两种状态,则需要转换到('test.subs')
或转到test.subs
的url,就是这样!非常感谢你。它是基状态上的“abstract:true”与具有url:“”的子状态的组合。基本状态现在可以有任何url。查看我的小提琴以了解最终结果-@TimHardy你的小提琴解决了我的问题。。。我被难住了一段时间。你应该在问题的更新中发布你的工作提琴。
angular.module('myApp', ['ui.state'])
.config(['$stateProvider', '$routeProvider',
function ($stateProvider, $routeProvider) {
$stateProvider
.state('test', {
abstract: true,
url: '',
views: {
'main': {
template: '<h1>Hello!!!</h1>' +
'<div ui-view="view1"></div>' +
'<div ui-view="view2"></div>'
}
}
})
.state('test.subs', {
url: '',
views: {
'view1': {
template: "Im View1"
},
'view2': {
template: "Im View2"
}
}
});
}])
.run(['$rootScope', '$state', '$stateParams', function ($rootScope, $state, $stateParams) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
// $state.transitionTo('test');
}]);