我正在为工作中的新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会让我在测试会话中登录。
答案 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 $间隔电话?