Angular.JS全局变量和服务

时间:2015-08-09 18:34:52

标签: javascript angularjs

我正在为工作中的新Web应用程序项目学习Angular.JS,作为较小应用程序的ASP.NET的替代方案。我做得很好,但是我今天遇到了一个问题而且它整天都在破坏我的大脑。

我有一个App.JS文件,它需要我的app-core.JS文件,而后者需要我的main-controller.JS文件。我在控制器中的工作是一次非常好的学习经历。我遇到了改变视图的地方,我的变量会在控制器内重置。所以我读到我应该使用服务来存储全局变量。所以我按照教程创建了一个服务:

http://viralpatel.net/blogs/angularjs-service-factory-tutorial/

我将服务注入我的控制器,它似乎正在工作 - 但是它无法正常工作。在我的服务中,我有一个名为RUNTIME的变量,以及一个名为this.IncrementRunTime的函数,它将返回RUNTIME + 1.在我的控制器内部,我有一个名为$ scope.Runtime = service.IncrementRuntime()的变量。然后我做了一个console.log并使用Chrome的调试器,我可以看到运行时的值。

问题是,日志显示我将运行时增加值2,而不是每次增加1。字面上 - 日志将显示 - 每一秒 - 1,3,5,7 ----而不是1,2,3,4,5等我无法弄清楚为什么会发生这种情况。关于我在这里做错了什么的想法或想法?谢谢!

更新:这是我当前项目的链接。我无法解决这个问题。如果有人可以下载这个项目并帮助我,我会很感激。我对此非常厌倦。我确实将下面的代码粘贴到我自己的项目中并且它做了同样的事情。然后,我使用下面的代码启动了一个新项目 - 它工作,但然后它停止加载我的视图,但增量工作。我对我的代码和下面的代码进行了比较 - 100%匹配。我只需要证明我可以携带数据和信息,并使其在视图更改中保持不变。否则,我将坚持使用ASP.NET项目,因此我可以使用Session Variables。请帮我弄清楚我做错了什么。

https://drive.google.com/file/d/0BysoWvPv5Aj5ZDZUZjN4S3ZPdk0/view?usp=sharing

更新:好的,我做了一个发现。它对我来说并没有多大意义,但它作为一个网络开发者应该早点检查。如果我使用Chrome,Edge或IE,代码会正确运行并递增(每秒1次调用);但是视图不会加载。如果我使用Firefox(我的主要开发浏览器) - 视图将正确加载,但Interval将增加2而不是1.这对我来说没什么意义。我使用Chrome作为我的主要个人浏览器,它保存了我的所有cookie,登录等。所以我使用Firefox作为我的开发浏览器,它每次打开一个新窗口时都会清除我的cookie和表单数据 - 所以当我测试应用程序时这需要身份验证,我不必担心Chrome会让我在测试会话中登录。

1 个答案:

答案 0 :(得分:0)

我在这个plunker上尝试了你的代码:http://plnkr.co/edit/O1zhkqhc0kKPe86PEsYR?p=preview

angular.module('global-service', [])
.service('service', function () {

    var running = 0;

    this.IncrementRunTime = function () {
        running = running + 1;

        return running;
    }

})
.controller('ctrl', function ($interval, $scope, service) {
  $scope.OnUpdate = function () {

      // Increments RUNTIME
      $scope.RUNTIME = service.IncrementRunTime();

      // Debug Info to console
      console.log("Runtime: " + $scope.RUNTIME);
  }

  $interval(function () { $scope.OnUpdate(); }, 1000);
});

一切都很好看。您是否可以嵌套2 $间隔电话?