Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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路由器状态更改时清除共享AngularJS控制器变量_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 当ui路由器状态更改时清除共享AngularJS控制器变量

Javascript 当ui路由器状态更改时清除共享AngularJS控制器变量,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,在AngularJS 1.5.8应用程序中,我使用ui路由器在所有使用相同控制器的页面之间导航。ng-controller属性应用于body标记,ui-view属性应用于div,该div显然位于HTML的主体内部。为了简单起见,假设它看起来像这样: <body ng-controller="SecurityController as securityCtrl"> <div ui-view></div> </body> 路由工作正常,当我改

在AngularJS 1.5.8应用程序中,我使用ui路由器在所有使用相同控制器的页面之间导航。ng-controller属性应用于body标记,ui-view属性应用于div,该div显然位于HTML的主体内部。为了简单起见,假设它看起来像这样:

<body ng-controller="SecurityController as securityCtrl">
    <div ui-view></div>
</body>
路由工作正常,当我改变状态时,它不会重新初始化控制器,这正是我想要的。我在控制器中有一个
errorMessage
变量,我想在状态改变时将该变量设置为未定义,但我不希望向导航按钮添加javascript来实现这一点

我知道您可以为路由注册事件处理程序,我正在成功地将它们用于
$stateChangeError
$viewContentLoaded
,但可用的参数有
事件、toState、toParams、fromState、fromParams和error
。如果没有一个大的
switch
语句,我不知道如何轻松地使用它们来告诉公共控制器将其
errorMessage
变量设置为未定义。不是所有的路由都需要清除这个变量,但是我想我可以清除它,不管这样做是否必要

另外,我在某个地方听说,在每次状态更改后,可以使控制器重新初始化。那是B或C计划

标记路由子集的最简单方法是什么?我可以轻松确定是以这种方式标记fromState还是toState,以便清除变量?如果你能想出一个更好的方法来做这件事,我洗耳恭听

.state('someState', {
    url: "/somestate",
    data: { resetMessage: true } 
    ...
})
并在您的
中运行

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
  if (toState.data.resetMessage)
  {
     ... //Clear errorMessageVariable
  }
});

如果有人有同样的问题,我应该说,虽然这个答案是标记路线的好方法,但它可能不允许问题的标题所要求的。我不确定是否可以使用此技术清除控制器变量。如果将$injector添加到angular.module(…).run参数,则可以获得所请求类型的控制器,但它与您已经使用的实例不同。对我来说,这是行不通的。其他帖子中的建议是将要清除的变量放在服务中,而不是控制器中。这对我很管用。
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
  if (toState.data.resetMessage)
  {
     ... //Clear errorMessageVariable
  }
});