使用ui-router和AngularJS的多个嵌套ui视图

Bil*_*ill 18 angularjs angular-ui-router

我只想首先说一下我查看了与此问题相关的堆栈溢出问题,因为我能找到并且我没有看到任何关于我遇到的问题的问题.有些相似,但不是真的.这是问题:

我有以下$ stateProvider设置:

$stateProvider.
    state('root', {
        url: '',
        views: {
            'ViewA': {
                templateUrl: 'ViewA.html',
                controller: ViewAController
            },
            'ViewB': {
                templateUrl: 'ViewB.html',
                controller: ViewBController
            },
            'ViewC': {
                templateUrl: 'ViewC.html',
                controller: ViewCContoller
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

以下是与它一起使用的index.Html:

<head>
    <title>Angular PoC</title>       
</head>
<body ng-controller="DashboardController">
    <!-- Account View for logging in -->
    <div ui-view="ViewA" ng-hide="currentlyLoggedIn"></div>

     <!-- Used to toggle the two main views -->
    <div ng-show="currentlyLoggedIn">
        <button ng-click="activateViewB()"> View B </button> 
        <button ng-click="activateViewC()"> View C </button>
    </div>

    <!-- These are the two main views -->
    <div ui-view="ViewB" ng-show="currentlyLoggedIn && currentViewB"></div>
    <div ui-view="ViewC" ng-show="currentlyLoggedIn && currentViewC"></div>
</body>
Run Code Online (Sandbox Code Playgroud)

这是ViewC.html:

<div>
    This is ViewC
    <div ui-view="ViewCDetails"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我需要让所有的ViewA,B,C基本上彼此独立行动,基本上它们都是各自的状态机.他们需要都处于相同的视图中,因为所有三个人都需要保持他们的状态,即使其中一个人改变了.我遇到的最大问题是我无法初始化"ViewCDetails",并且我无法添加任何影响其中一个视图的状态而不会影响其他两个视图.有没有办法添加只影响其中一个视图的状态而不会对其他两个视图产生负面影响?另外要注意的是,这应该是SPA,因此它不是URL驱动的.

Dog*_*Dog 41

$stateProvider.
    state('root', {
        url: '',
        views: {
            'ViewA': {
                templateUrl: 'ViewA.html',
                controller: ViewAController
            },
            'ViewB': {
                templateUrl: 'ViewB.html',
                controller: ViewBController
            },
            'ViewC': {
                templateUrl: 'ViewC.html',
                controller: ViewCContoller
            },
            'ViewCDetails@root': {
                templateUrl: 'ViewCDetails.html',
                controller: ...
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views

  • 我的天啊!罗布,我不会撒谎,我现在有点爱上你了.我想努力让这样的东西工作3个小时!你真棒. (6认同)
  • 你为什么把ViewCDetails @ root放到最后一个?我们如何从ViewAController中获取要在ViewCController中使用的东西.就像在视图中如何共享范围变量一样. (4认同)