Angularjs ui-router没有到达子控制器
我有一个configurationfunction:
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); } } } })
正如RadimKöhler所说。 它输出mainViewctrl Object {taskId: "32"}
,但我$stateParams.taskId
能从innerView
到$stateParams.taskId
?
用UI-Router进行绝对命名的工作有点不同,那么你已经使用它了
.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
scheme,其中viewname是view指令中使用的名称,state名称是状态的绝对名称,例如contact.item。 您也可以select以绝对语法编写视图名称。
我在这里创造了一个工作的例子 ,各州是这样的
$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>", } } });
我们可以看到的是,盛大的父projectsWs
正在注入到index.html(root) <div ui-view="">
一些模板中,并带有两个命名锚:
template: '<div ui-view="mainView" ></div>' + '<div ui-view="innerView" ></div>',
然后在列表和详细状态中使用它们,并使用相对的绝对名称
在这里检查它的行动