Angularjs ui-router 未到达子控制器

2023-12-05

我有一个配置函数:

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, tasksCtrl功能按预期工作。但是当我得到带有 id 的 url 时,即/projects-ws/tasks/32,我没有看到任何输出,但我期望innerViewCtrl输出,这就是我遇到的问题。我认为我对绝对/相对视图有问题,但我已经尝试了所有组合,但它仍然不起作用。

UPDATE:所以现在我有以下状态:

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 Object {taskId: "32"},但是我怎样才能到达$stateParams.taskId from innerView now?


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
        "[email protected]": {

检查:

视图名称 - 相对名称与绝对名称

小引用:

在幕后,每个视图都会被分配一个绝对名称,该名称遵循以下方案:viewname@statename,其中 viewname 是视图指令中使用的名称,状态名称是状态的绝对名称,例如联系人.项目。您还可以选择以绝对语法编写视图名称。

我创建了一个工作示例在这里,各州都是这样的

$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>',

然后在列表和详细状态中使用,并使用相对名称和绝对名称

核实here在行动

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angularjs ui-router 未到达子控制器 的相关文章

随机推荐