gpt4 book ai didi

javascript - 使用 AngularJS 服务和 View 处理页面刷新

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:34:26 26 4
gpt4 key购买 nike

我有一个带有两个 View 的简单 SPA: ListView 和详细信息 View 。我使用名为 StateService 的服务在两个 Controller 之间传递数据。

我正在尝试处理用户刷新浏览器页面的情况——发生这种情况时,StateService 会重新初始化,详细信息 View 将无法再工作。我想检测这种情况何时发生并将用户返回到 ListView 。

这是我的状态服务的简化版本。我的想法是,当我切换到详细信息 View 时,我会将 isInitialized 设置为 true,以便我可以检测到服务何时未正确初始化。

var StateService = function () {
var isInitialized = false;
};

这是我在 Controller 的前几行中尝试过的。 StateService 已成功注入(inject) Controller 。

//always returns [Object], on refresh or navigating from list page
alert(StateService);
// this next line always returns undefined. Should be false since I am initializing
// the value to false?
alert(StateService.isInitialized);
//One of the many combinations I have tried . . .
if (!StateService.isInitialized | StateService.isInitialized == false) {
$location.path('/');
}

我不知道这是否是我对 javascript 或 angular 的理解上的差距,但是关于如何使上述代码工作的任何想法,或者关于用户刷新页面时该做什么的更好的想法?

编辑

按照 nycynik 的建议使用 console.log 我看到以下内容:

c {} [StateService]
undefined [StateService.isInitialized]

所以当这段代码被命中时,StateService 本身似乎只是一个空对象。我从我的另一个 Controller (处理 ListView 的 Controller )得到了相同的结果。

如评论中所述,该服务似乎按预期工作。

最佳答案

我认为您的范围界定有问题。 javascript 中的变量具有函数作用域。isInitialized 的范围仅限于您的 StateService 函数,因此您无法在 StateService 函数之外获取它。

不确定你是如何将这个东西放入你的 Controller 中的,但也许这些帮助:

如果您使用 Angular module.service() 将 StateService 用作构造函数以将(新的 StateService)注入(inject)您的 Controller ,那么您需要在实例上设置 isInitialized

var StateService = function () {
this.isInitialized = false;
};

这样 (new StateService).isInitialized === false

如果您只是使用 module.factory() 或其他不使用 new 的东西,那么您需要将 isInitialized 值放在其他您可以实际获取的地方。

var StateService = function () {
};
StateService.isInitialized = false

希望对您有所帮助。

关于javascript - 使用 AngularJS 服务和 View 处理页面刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834671/

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