gpt4 book ai didi

angularjs - 一个 Angular UI Router 状态共享范围内的两个 View

转载 作者:行者123 更新时间:2023-12-02 21:42:57 26 4
gpt4 key购买 nike

我对 AngularUI Router 还很陌生,希望将其用于以下场景:

所有页面通用的布局包括一个顶部导航栏,其中包含右侧带有按钮的菜单和填充下面空间的内容部分。该页面有几个页面映射到 UI Router 状态(page1、page2,...)。每个页面都可以有自己的菜单项和内容。 菜单需要与内容共享范围,因为它们进行交互(例如,保存按钮在内容中提交表单,只有在表单有效时才应启用它)。

mockup

HTML 大致如下所示:

<body>
<nav class="...">
<h1>my site</h1>
<div>MENU SHOULD GO HERE</div>
</nav>
<div class="row">
<div class="column ...">
CONTENT SHOULD GO HERE
</div>
</div>
</body>

现在,我为每个状态使用两个并行 View 和两个 Controller 。但这样,两个作用域/ Controller 就无法交互。

那么你将如何实现这一目标呢?

最佳答案

$scope 不是模型,它是对模型的引用,粘合在数据和 View 之间。如果两个或多个 Controller 需要共享一个模型/状态/数据,则通过注册 angular.service 使用单例对象实例。可以将一个服务/工厂注入(inject)到任意数量的 Controller 中,然后一切都可以基于该事实来源进行。

这是 1 个工厂的演示,将导航栏和正文中的 $scopes 与 ui-router 链接起来 http://plnkr.co/edit/P2UudS?p=preview (仅限左侧选项卡)

ui-router(viewC 是导航栏):

$stateProvider
.state('left', {
url: "/",
views: {
"viewA": {
controller: 'LeftTabACtrl',
template: 'Left Tab, index.viewA <br>' +
'<input type="checkbox" ng-model="selected2.data" />' +
'<pre>selected2.data: {{selected2.data}}</pre>'
},
{...},
"viewC": {
controller: 'NavbarCtrl',
template: '<span>Left Tab, index.viewC <div ui-view="viewC.list"></div>' +
'<input type="checkbox" ng-model="selected.data" />' +
'<pre>selected.data: {{selected.data}}</pre></span>'
}
}
})

工厂和 Controller :

app.factory('uiFieldState', function () {
return {uiObject: {data: null}}
});

app.controller('NavbarCtrl', ['$scope', 'uiFieldState', '$stateParams', '$state',
function($scope, uiFieldState, $stateParams, $state) {
$scope.selected = uiFieldState.uiObject;
}
]);

app.controller('LeftTabACtrl', ['$scope', 'uiFieldState', '$stateParams', '$state',
function($scope, uiFieldState, $stateParams, $state) {
$scope.selected2 = uiFieldState.uiObject;
}
]);

如您所见,工厂对象 {uiObject: {data: null}} 使用 uiFieldState 注入(inject)到 Controller 中,然后它只是 $scope .selected = uiFieldState.uiObject; 用于将工厂连接到范围 ng-model="selected.data".`

关于angularjs - 一个 Angular UI Router 状态共享范围内的两个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904174/

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