Javascript Angularjs ui路由器未到达子控制器
我有一个配置函数:Javascript Angularjs ui路由器未到达子控制器,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我有一个配置函数: function config($stateProvider,$locationProvider) { $locationProvider.html5Mode(true); $stateProvider .state('projectsWs.tasks', { url: "/tasks", views: { "mainView": { templateUrl: "/app/proj
function config($stateProvider,$locationProvider) {
$locationProvider.html5Mode(true);
$stateProvider
.state('projectsWs.tasks', {
url: "/tasks",
views: {
"mainView": {
templateUrl: "/app/projects/templates/index.php"
},
"innerView": {
templateUrl: "/app/projects/templates/tasks.php",
controller: tasksCtrl,
controllerAs:'tasks'
}
}
})
.state('projectsWs.tasks.detail', {
url: "/:taskId",
views: {
"mainView@": {
templateUrl: "/app/projects/templates/index.php"
},
"innerView@mainView": {
templateUrl: "/app/projects/templates/tasks.php",
controller: function($stateParams) {
console.log('innerViewCtrl', $stateParams);
}
}
}
});}
InnerView位于mainView内部。
当我有像/projects ws/tasks
这样的url时,tasksCtrl
函数按预期工作。但是当我得到一个id为的url时,即/projects ws/tasks/32
,我看不到任何输出,但我希望innerViewCtrl
输出,这就是我遇到的问题。我想我在绝对/相对视图方面有问题,但我已经尝试了所有组合,但仍然不起作用
更新:
现在我得到了以下状态:
state('projectsWs.tasks.detail', {
url: "/:taskId",
views: {
"mainView@": {
templateUrl: "/app/projects/templates/index.php",
controller: function($stateParams) {
console.log('mainViewctrl', $stateParams);
}
},
"innerView": {
templateUrl: "/app/projects/templates/tasks.php",
controller: function($stateParams) {
console.log('innerViewctrl', $stateParams);
}
}
}
})
正如拉迪姆·克勒所说。它输出
mainViewctrl对象{taskId:“32”}
,但现在如何从innerView
访问$stateParams.taskId
?UI路由器的绝对命名工作原理与您使用的略有不同
.state('projectsWs.tasks.detail', {
url: "/:taskId",
views: {
"mainView@": {
templateUrl: "/app/projects/templates/index.php"
},
// this won't work, because the part after @
// must be state name
"innerView@mainView": {
// so we would need this to target root, index.html
"innerView@": {
// or this to target nested view inside of a parent
"innerView": {
// which is the same as this
"innerView@projectsWs.tasks": {
检查:
小引用:
在幕后,每个视图都会被分配一个绝对名称,该名称遵循viewname@statename
,其中viewname是view指令中使用的名称,state name是州的绝对名称,例如contact.item。您还可以选择以绝对语法编写视图名称
我创建了一个,状态是这样的
$stateProvider
.state('projectsWs', {
template: '<div ui-view="mainView" ></div>' +
'<div ui-view="innerView" ></div>',
})
$stateProvider
.state('projectsWs.tasks', {
url: "/tasks",
views: {
"mainView": {
//templateUrl: "/app/projects/templates/index.php"
template: "<div>main view tasks </div>",
},
"innerView": {
//templateUrl: "/app/projects/templates/tasks.php",
template: "<div>inner view tasks </div>",
}
}
})
.state('projectsWs.tasks.detail', {
url: "/:taskId",
views: {
"mainView@projectsWs": {
//templateUrl: "/app/projects/templates/index.php"
template: "<div>main view task {{$stateParams | json }} </div>",
},
"innerView@projectsWs": {
//templateUrl: "/app/projects/templates/tasks.php",
template: "<div>inner view task {{$stateParams | json }} </div>",
}
}
});
然后在列表和详细信息状态中使用相对resp绝对名称
在实际操作中检查它为什么要重复声明每个视图?@BenDiamant我不应该这样做吗?子状态似乎不会从父状态继承控制器。无论如何,在
projectsWs.tasks
state中,我得到了空的$stateParams
对象。我添加了一个plunker,它应该包含所有剩余的不确定性;)如果我的
里面有
怎么办?给我几秒钟,我会起草一份关于如何在plunker中。。。应该比Words更好我已经这么做了,而且很有效,谢谢!如果你能解释为什么它不好,那也太酷了,谢谢你!我在这里创建了另一个plunker,展示了如何使用视图嵌套。。。父级,注入到mainView。。。祖父母的。但随后,它将innerView直接注入到自己的视图中。而不是祖父母。然后,子视图只能更改内部视图。希望这有帮助;)玩我的例子。享受强大的用户界面路由器;);)
template: '<div ui-view="mainView" ></div>' +
'<div ui-view="innerView" ></div>',