AngularJS:帮助我避免这种反模式:在$location.path之前在$rootScope上设置变量

AngularJS:帮助我避免这种反模式:在$location.path之前在$rootScope上设置变量,angularjs,angular-ui-router,rootscope,Angularjs,Angular Ui Router,Rootscope,这里有一些简单的东西,我认为一定有更好的方法:我经常需要导航到一个新的视图,同时我想为将要创建的范围提供一些上下文信息。我不知道如何简单地做到这两件事——更改url(导致我的视图/控制器被实例化)并传递一些我希望在控制器范围内实例化的变量——例如,这样它们就可以在视图模板中呈现 因此,我正在做: $rootScope.myVar = 'blah'; $location.path = '/newView' ; 和newView.html访问{{myVar} 我知道这是错误的,避免使用$rootS

这里有一些简单的东西,我认为一定有更好的方法:我经常需要导航到一个新的视图,同时我想为将要创建的范围提供一些上下文信息。我不知道如何简单地做到这两件事——更改url(导致我的视图/控制器被实例化)并传递一些我希望在控制器范围内实例化的变量——例如,这样它们就可以在视图模板中呈现

因此,我正在做:

$rootScope.myVar = 'blah';
$location.path = '/newView' ;
newView.html
访问
{{myVar}


我知道这是错误的,避免使用
$rootScope
作为全球垃圾场的最简单解决方案是什么?

您可能应该从使用路由提供商开始,ui路由器或angular的$routeProvider,您可以在查询参数中传递状态或将其存储在服务中,而不是使用
$location.path
。注意:如果你没有将状态存储在url中,那么当页面刷新时它将丢失。我实际上在我的项目中包括了ui路由器,如何使用它呢?@rob-创建一个服务似乎有点重,我想使用查询参数就可以了,虽然我希望使用ui路由器不在URL中公开变量,但您可以在控制器上将变量定义为新页面的参数,甚至可以使用
resolve
块等待在加载前查找变量。