Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 观察角度ui路由器中的状态变化_Javascript_Angularjs_Angularjs Scope_Angular Ui Router - Fatal编程技术网

Javascript 观察角度ui路由器中的状态变化

Javascript 观察角度ui路由器中的状态变化,javascript,angularjs,angularjs-scope,angular-ui-router,Javascript,Angularjs,Angularjs Scope,Angular Ui Router,据我所知,获取状态更改通知的常用方法是对$stateChangeStart事件进行回调,如中所示 但是,如果我理解正确,我还可以将$state对象附加到当前范围,如下所示: myApp.controller('myAppCtrl', function($scope, $state) { $scope.$state = $state; } 据我所知,这将使直接从HTML模板查看状态详细信息成为可能,例如(假设我的一些状态的布尔标志.isAdminlyState设置为true,并且我希望在

据我所知,获取状态更改通知的常用方法是对
$stateChangeStart
事件进行回调,如中所示

但是,如果我理解正确,我还可以将$state对象附加到当前范围,如下所示:

myApp.controller('myAppCtrl', function($scope, $state) {
    $scope.$state = $state;
}
据我所知,这将使直接从HTML模板查看状态详细信息成为可能,例如(假设我的一些状态的布尔标志
.isAdminlyState
设置为true,并且我希望在显示它们时使整个页面变红):



与具有侦听器功能相比,这种方法的优点和缺点是什么?

这取决于您是想全局处理某件事情还是在单个控制器/视图上处理某件事情,您描述的方法适用于后者。但是,在您发布的代码中,您需要确保
myAppCtrl
在您的应用程序中始终处于活动状态,以便正确更新
ng类。通过路由,您往往会在给定的时间点(而不是所有时间点)有一个或多个控制器处于活动状态。有人可能会说,这是您发布的方法的一个缺点,如果您在
$rootScope
上处理
$state
更改事件,您可以将
$state.current.data.isAdminlyState
放在
$rootScope
上,并相应地进行更新。将其放在根作用域上的一个缺点是(我认为)会影响性能,因为对于调用处理程序的每个状态转换,以及执行处理程序中的代码,另一个缺点是,在
$rootScope
上放置
$state.current.data.isAdminlyState
会污染通常不受欢迎的根范围。话虽如此,如果您想让
myAppCtrl
始终处于活动状态,例如让它成为主页某个部分的控制器,例如导航栏部分,则在每次状态转换期间仍会对其进行评估


有点不相关:ui路由器有一个指令来做你想做的事情。在代码片段中,请查看
ui sref active

谢谢,这很有见地。
<body ng-class='{"everythingInRed": $state.current.data.isAdminOnlyState}'>