如何访问处于相同状态的其他子视图.我正在构建一个顶部有一个工具栏的页面和一个侧边栏,我想要一个工具栏上的按钮来打开/关闭边栏中的侧边栏和按钮来更改内容.很简单它都在同一个控制器中,但我所做的是使用ui-router的子视图功能,如下所示:
.state('dash', { url: '/dash/:id', views: { nav: { controller: 'NavCtrl', controllerAs: 'ctrl', templateUrl: '/views/navbar.html' }, sidebar: { controller: 'SidebarCtrl', controllerAs: 'ctrl', templateUrl: '/views/sidebar.html' }, content: { controller: 'DashCtrl', controllerAs: 'ctrl', templateUrl: '/views/dash.html' } } })
UI看起来像这样:
定义解析并将其用作存储激活的"破折号"状态的公共数据的位置.
app.config(function($stateProvider) { $stateProvider.state('dash', { url: '/', resolve: { dashData: function() { return { input: "default value" }; } }, views: { nav: { controller: function() { }, controllerAs: 'ctrl', template: 'This is the Navbar
' }, sidebar: { controller: function(dashData) { // Inject reference to resolve object this.dashData = dashData; }, controllerAs: 'ctrl', template: 'content data visible in ' + 'the sidebar: {{ ctrl.dashData.input }}' }, content: { controller: function(dashData) { // Inject reference to resolve object this.dashData = dashData; }, controllerAs: 'ctrl', template: '' + 'This is bound to dashData.input' } } }) });
将共享对象注入每个控制器
app.controller('DashCtrl', function(dashData, $scope) { $scope.dashData = dashData; }); app.controller('... ....
我把这个例子放在了一个plunker中:http://plnkr.co/edit/8M1zXN0W5ybiB8KyxvqW?p = preview