te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - AngularJS - $rootScope property value undefined in service - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - AngularJS - $rootScope property value undefined in service - Stack Overflow

programmeradmin4浏览0评论

I am currently creating a new property in $rootScope and setting its value in one module.

$rootScope.test = 123;

I am then trying to reference this value later in a service function.

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

When I view the console output in Chrome, I can see that the value of test is being set properly in the $rootScope object, but I am unable to reference using the $rootScope.test syntax. $rooScope.test simply returns undefined.

Is there any reason that you can't reference property values of $rootScope in services? Or am I attempting to retrieve this value improperly?


UPDATE - I have created a Plunker that demonstrates the issue that I am running into.

I am currently creating a new property in $rootScope and setting its value in one module.

$rootScope.test = 123;

I am then trying to reference this value later in a service function.

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

When I view the console output in Chrome, I can see that the value of test is being set properly in the $rootScope object, but I am unable to reference using the $rootScope.test syntax. $rooScope.test simply returns undefined.

Is there any reason that you can't reference property values of $rootScope in services? Or am I attempting to retrieve this value improperly?


UPDATE - I have created a Plunker that demonstrates the issue that I am running into. http://plnkr.co/edit/ePEiYh

Share Improve this question edited Aug 21, 2013 at 14:31 ral8 asked Aug 21, 2013 at 13:02 ral8ral8 1531 gold badge1 silver badge7 bronze badges 4
  • How about trying .factory("testFactory", ["$location", "$http", $rootScope", function($location, $http, $rootScope) { ... }]); – tymeJV Commented Aug 21, 2013 at 13:05
  • 1 Make sure that you are doing $rootScope.test = 123; before you do testFactory.testFunction(); – AlwaysALearner Commented Aug 21, 2013 at 13:08
  • How did you solve this? I'm running through the exact same problem. In the console I can see the attribute in the first console.log but in the second when trying to print the attribute itself it es as undefined – victor hugo Commented Jan 16, 2015 at 2:20
  • I ended up using $dispatch on the $rootScope to notify the factory function when the value was set, which is shown in an example here - youtube./watch?v=1OALSkJGsRw . This might not be the most elegant solution, but worked for my scenario. – ral8 Commented Jan 16, 2015 at 15:11
Add a ment  | 

1 Answer 1

Reset to default 9

This should work just fine:

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

I guess that you are reading the value before you are writing it.

UPDATE

The debugging experience is really weird here. However, in my updated plunker you can see through the timestamps that the writing happens after reading:

http://plnkr.co/edit/pn5Wxk

发布评论

评论列表(0)

  1. 暂无评论