gpt4 book ai didi

javascript - AngularJS 单页应用中多个区域的独立路由

转载 作者:可可西里 更新时间:2023-11-01 02:21:32 24 4
gpt4 key购买 nike

我有一个包含四个区域的单页 AngularJS 应用程序,每个区域都有自己的内容:

Page Layout

我需要每个区域通过服务进行通信,但除此之外,它们需要有自己独立的路由以供查看,即它们都应该有自己的 View 状态。

我已经尝试用 plunkr 来做到这一点 ( angular-ui-router )但我不知道如何创建只影响特定模块或区域的 angular-ui 状态,而不修改页面上的其余区域。

页面包含区域:

<body>
<a ui-sref="initial1">Initial Region 1</a><br/>
<a ui-sref="initial2">Initial Region 2</a>

<div ui-view="region1" class="region1"></div>
<div ui-view="region2" class="region2"></div>
</body>

并且应用程序尝试在独立模块中定义每个区域:

var app = angular.module('Main', ['ui.router', 'Region1', 'Region2']);

var region1App = angular.module('Region1', []);

region1App.config(function($urlRouterProvider, $stateProvider) {
$urlRouterProvider.otherwise("/");
$stateProvider
.state('initial1', {
url: '/',
views: {
'region1@': {
template: 'Initial Region 1 State, go to <a ui-sref="second1">Second State</a>'
}
}
})
.state('second1', {
url: '/',
views: {
'region1@': {
template: 'Second Region 1 State, go to <a ui-sref="initial1">Initial State</a>'
}
}
});
});

var region2App = angular.module('Region2', []);

region2App.config(function($urlRouterProvider, $stateProvider) {
$urlRouterProvider.otherwise("/");
$stateProvider
.state('initial2', {
url: '/',
views: {
'region2@': {
template: 'Initial Region 2 State, go to <a ui-sref="second2">Second State</a>'
}
}
})
.state('second2', {
url: '/',
views: {
'region2@': {
template: 'Second Region 2 State, go to <a ui-sref="initial2">Initial State</a>'
}
}
});
});

每个模块应该有自己的“初始”状态和“第二”状态,并且两者应该同时显示在屏幕上,改变一个状态不应该影响另一个。如果使用 angular-ui-router 无法做到这一点,那么使用 Angular 做到这一点的最佳方法是什么?

最佳答案

您可以使用 UI-Router Extras - sticky states实现您的目标。

您需要一个名为 <div ui-view='name'></div> 的对于每个区域。然后,添加 sticky: true以该区域的命名 View 为目标的状态定义。

<div ui-view="region1"></div>
<div ui-view="region2"></div>
<div ui-view="region3"></div>
<div ui-view="region4"></div>


.state('state1', {
sticky: true,
views: { region1: { templateUrl: 'foo.html', controller: barCtrl } }
}
.state('state2', {
sticky: true,
views: { region2: { templateUrl: 'foo2.html', controller: bar2Ctrl } }
}
.state('state3', {
sticky: true,
views: { region3: { templateUrl: 'foo3.html', controller: bar3Ctrl } }
}
.state('state4', {
sticky: true,
views: { region4: { templateUrl: 'foo4.html', controller: bar4Ctrl } }
}

有一个demo您可以查看哪个显示了它是如何工作的。注意:该演示使用选项卡并相应地显示/隐藏 ui View 。您的用例不需要显示/隐藏每个命名 View 。

查看 demo source code了解更多。

关于javascript - AngularJS 单页应用中多个区域的独立路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26065137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com