如何使用angular度ui路由器来隐藏和显示视图?
想象一下,一个应用程序有一个List页面,比如一个显示用户列表的表格。 表格的每一行都有一个名为“编辑”的button,点击该button后,浏览器的右侧出现一个右侧面板,编辑该用户的内容。 当表单被保存或closures时,右侧面板消失。
在编辑状态input和退出时,如何让Angular UI Router自动显示/隐藏右侧面板? 默认情况下,模板将被添加和删除,但容器本身仍然存在于屏幕上。
在UI路由器的演示应用程序中,html布局具有为所有子状态分配的空白空间,但在构build的应用程序中,如果不使用它们,我真的很喜欢隐藏面板,甚至可以将整个屏幕滑入随着国家进入和退出而退出。 我猜测我必须使用ng-show和ng-hide才能做到这一点。 我如何通过UI路由器来解决这个问题?
谢谢!
Angular的UI路由器提供了一个干净的方法来切换嵌套视图。
首先注入$状态到您的假设“列表页面”控制器。 然后将其暴露给本地$ scope:
.controller('ListPageCtrl', function($scope, $state) { $scope.$state = $state; })
我们注入的$ statevariables有一个很好的“包含”方法。 $ state.includes()将一个string作为参数,并检查该string是否与当前状态名称相对应。 如果状态名称匹配string,则返回true,否则返回false。 这使得使用ng-show或ng-hide非常好。
使用ui-router的$ state.includes()而不是使用与egervari相同的模板:
<div id="rightView" ng-show="$state.includes('list.edit')"> <div ui-view="edit" autoscroll="false"></div> </div>
除了切换到包含方法外,我还为ui-view属性添加了一个唯一的名称。 一旦你有更多的两个,你会想要命名你的意见。 这将使他们更容易跟踪你的模板和逻辑。
为您的视图添加名称。 将1更改为2:
// 1 .state('list.edit', { url: 'list/edit/:id', templateUrl: 'template/edit.html', controller: 'ListPageEditCtrl' }) // 2 .state('list.edit', { url: 'list/edit/:id', views: { 'edit': { // this is the unique name you can reference later templateUrl: 'template/edit.html', controller: 'ListPageEditCtrl' } } });
我想到的最好的解决scheme是这样的:
<div id="rightView" ng-show="$state.current.name === 'adminCompanies.list.edit'"> <div ui-view autoscroll="false"></div> </div>
在任何情况下,您都可以解决这个问题,只要确保在angular应用程序的.run部分中声明了如下内容:
angular.module('yourApp', ['ui.router']) .run( ['$rootScope', '$state', '$stateParams', function ($rootScope, $state, $stateParams){ $rootScope.$state = $state; $rootScope.$stateParams = $stateParams; } ] )
否则$ state和$ stateParams都不能从内部模板中获取。 通过阅读ui-router文档并检查示例应用程序的代码,只是在将我的头撞在键盘上后,才发现它没有起作用。
你的url必须反映使用查询string的状态模式: /stuff/1?edit
或/stuff/1
代表/stuff/1?view
你可以使用reloadOnSearch=false
来指示AngularJS不要重新加载视图:
http://docs.angularjs.org/api/ngRoute.$routeProvider
在controller
内部,使用$routeParams
检查状态模式( view
或edit
)。 抓住编辑点击事件,将您的模型传递到您的酒吧,并相应地切换其可见性。
看到那些有趣的链接:
你可以改变一个path,而不用重新加载AngularJS中的控制器?
在Angular JS中更新URL而不重新呈现视图
- 如何使用ui-view而不是ng-view使用ng-animate?
- 当我使用async / awaitfunction时,Angular UI路由器不处理parsing函数?
- 加载相对的templateUrl
- 使用$ window或$ location在AngularJS中redirect
- Angular UI路由器 – 如何访问从父模板传递的嵌套命名视图中的参数?
- 清除历史logging和使用Ionic Frameworklogin/注销重新加载页面
- 用ui路由器公开当前状态名称
- ionic framework$ state.go('app.home'); 在页面上添加我想要去(如何删除它)的返回button?
- 如何在angularjs ui-router中的状态之间共享$ scope数据?