观察angular ui路由器的状态变化
Observing state changes in angular-ui-router
据我所知,获得状态更改通知的常用方法是对$stateChangeStart
事件进行回调,如下面的回答所示。
然而,如果我理解正确,我也可以将$state对象附加到当前范围,如:
myApp.controller('myAppCtrl', function($scope, $state) {
$scope.$state = $state;
}
据我所知,这将使直接从HTML模板中查看状态详细信息成为可能,例如(假设我的一些状态有一个布尔标志.isAdminOnlyState
设置为true,并且我想在显示它们时使整个页面变红):
<body ng-class='{"everythingInRed": $state.current.data.isAdminOnlyState}'>
与具有侦听器功能相比,这种方法的优点和缺点是什么?
这取决于您是想全局处理还是在单个控制器/视图上处理,您所描述的方法适用于后者。然而,在您发布的代码中,您需要确保myAppCtrl
在应用程序中始终处于活动状态,以便正确更新该ng-class
。通过路由,您往往会在给定的时间点(而不是所有时间)激活一个控制器。有人可能会说,这是您发布的方法的缺点,如果您在$rootScope
上处理$state
更改的事件,则可以将$state.current.data.isAdminOnlyState
放在$rootScope
上,并相应地进行更新。将其放在根作用域上的一个缺点是(我想)会对性能产生影响,因为对于调用该处理程序的每个状态转换,以及执行处理程序内部的代码,另一个缺点将是将$state.current.data.isAdminOnlyState
放在$rootScope
上会污染根作用域,这通常是不受欢迎的。话虽如此,如果您打算让myAppCtrl
始终处于活动状态,例如让它成为主页面的某个部分的控制器,例如导航栏部分,则在每次状态转换期间仍会对其进行评估。
有点无关紧要:ui路由器有一个指令,可以做你想做的事情,在那个代码片段中,查看ui-sref-active
。
- React redux初始化功能,无论状态变化如何
- 检测Ionic中特定的应用程序状态变化
- ReactJS-这个状态中的数组在删除时被正确更新,但结果是't,直到以后的状态发生变化
- 消除淘汰中引导程序开关状态变化的歧义
- 反应组件交互和全局状态变化
- 根据单选按钮的状态变化使儿童内容出现/消失
- 观察angular ui路由器的状态变化
- 如何与Redux沟通React组件之间的UI状态变化
- html5事件监听器详细节点状态变化
- 角度/离子谷歌地图的状态变化
- ReactJS -检测状态变化的问题
- 处理ReactJs中的状态变化
- 按钮循环3个状态变化
- 每次状态变化时的离子运行函数
- FP:在没有实际状态变化的情况下反映状态
- ReactJS:如何测试状态变化
- 发生状态变化时不应用ng类
- 动态jQuery CSS具有三状态滚动背景位置根据状态变化
- 承诺后的角度状态变化
- 是否有管理事件的“量子状态变化”的有用模式?(特别是在JavaScript中)