【问题标题】:AngularJS - $rootScope property value undefined in serviceAngularJS - 服务中未定义的 $rootScope 属性值
【发布时间】:2013-08-21 13:02:09
【问题描述】:

我目前正在 $rootScope 中创建一个新属性并在一个模块中设置它的值。

$rootScope.test = 123;

我稍后会尝试在服务函数中引用此值。

.factory("testFactory", function ($location, $http, $rootScope) {
    /* .... */
    return {
        testFunction : function(){
            console.log($rootScope);
            console.log($rootScope.test);
        },
        /* .... */

当我在 Chrome 中查看控制台输出时,我可以看到在 $rootScope 对象中正确设置了 test 的值,但我无法使用 $rootScope.test 语法进行引用。 $rooScope.test 只是返回 undefined。

是否有任何理由不能在服务中引用 $rootScope 的属性值?还是我试图不正确地检索此值?


更新 - 我创建了一个 Plunker 来演示我遇到的问题。 http://plnkr.co/edit/ePEiYh

【问题讨论】:

  • 试试.factory("testFactory", ["$location", "$http", $rootScope", function($location, $http, $rootScope) { ... }]);怎么样
  • 确保你在做$rootScope.test = 123;之前你做testFactory.testFunction();
  • 你是怎么解决这个问题的?我正在解决完全相同的问题。在控制台中,我可以在第一个 console.log 中看到该属性,但在第二个中尝试打印属性本身时,它是未定义的
  • 我最终在 $rootScope 上使用 $dispatch 在设置值时通知工厂函数,这在此处的示例中显示 - youtube.com/watch?v=1OALSkJGsRw 。这可能不是最优雅的解决方案,但适用于我的场景。

标签: javascript angularjs


【解决方案1】:

这应该可以正常工作:

var myApp = angular.module("myApp", []);

myApp.run(['$rootScope', function($rootScope){
    $rootScope.test = 123;
}]);

myApp.controller('AppController', ['$rootScope', function ($rootScope) {
    console.log($rootScope.test);
}]);

Plunker: http://plnkr.co/edit/7NTGOK

我猜你是在 读取值之前写入它。

更新

这里的调试体验真的很奇怪。但是,在我更新的 plunker 中,您可以通过读取后发生写入的时间戳看到:

http://plnkr.co/edit/pn5Wxk

【讨论】:

  • 不幸的是,我无法发布图片,但是在我的 Chrome 控制台中,当我首先打印出 console.log($rootScope) 并展开对象时,我看到定义了“test: 123”。在该行之后,我打印 console.log($rootscope.test) 它显示为未定义。如何使用 $rootScope 看到日志中的值,而不是 $rootScope.test?
  • 听起来确实很奇怪,但总有一个原因:) 你能尝试在 plunkr 中组合一个小测试用例吗?或者您是否可以在线访问您的应用?
  • 我已经编辑了原始问题并添加了 plunker 链接。
  • 这里的调试体验真的很诡异。但是,在我更新的 plunker 中,您可以通过阅读后发生写入的时间戳看到:plnkr.co/edit/pn5Wxk
  • 感谢克里斯托夫的帮助!时间是问题(因为它通常与角度有关)。我正在尝试在写入完成之前阅读。混乱在于 Chrome 在控制台中显示奇怪的结果。为了解决我的时间问题,我最后添加了一个 $rootScope.$dispatch(...) 行并在另一个控制器中监听事件,如此处所述 - youtube.com/watch?v=1OALSkJGsRw
猜你喜欢
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
相关资源
最近更新 更多