gpt4 book ai didi

javascript - 当 ui-router 状态改变时清除共享的 AngularJS Controller 变量

转载 作者:行者123 更新时间:2023-11-30 15:46:53 24 4
gpt4 key购买 nike

在 AngularJS 1.5.8 应用程序中,我使用 ui-router 在使用相同 Controller 的页面之间导航。 ng-controller 属性应用于 body 标签,而 ui-view 属性应用于显然位于 HTML 主体内的 div。为了简单起见,假设它看起来像这样:

<body ng-controller="SecurityController as securityCtrl">
<div ui-view></div>
</body>

如果有助于形象化我在说什么,示例路线是:

.state('login', {
url: "/login/:returnState",
templateUrl: "Account/Login"
})

路由工作正常,当我更改状态时,它不会重新初始化 Controller ,这正是我想要的。我在 Controller 中有一个 errorMessage 变量,我想在状态更改时将其设置为未定义,但我不想将 javascript 添加到导航按钮来实现这一点。

我知道您可以为路由注册事件处理程序,我成功地将它们用于 $stateChangeError$viewContentLoaded,但是可用的参数是 事件、toState、toParams、fromState、fromParams 和错误。我不知道如何在没有大型 switch 语句的情况下轻松地使用这些来告诉公共(public) Controller 将其 errorMessage 变量设置为未定义。并非所有路由都需要清除此变量,但我想我可以清除它,无论是否有必要这样做。

此外,我在某处听说您可以让 Controller 在每次状态更改后重新初始化。那是 B 计划或 C 计划。

标记路由子集的最简单方法是什么,我可以轻松地确定是以这种方式标记的是 fromState 还是 toState,以便我可以清除变量?如果您能想到更好的(仍然是干的)方法来做到这一点,我会洗耳恭听。

最佳答案

.state('someState', {
url: "/somestate",
data: { resetMessage: true }
...
})

然后在你的 .run

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

关于javascript - 当 ui-router 状态改变时清除共享的 AngularJS Controller 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39939705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com