Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs ui路由器未到达子控制器_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

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