2015-12-08 88 views
1

莫比它只是监督,但我不能控制台登录值我怎样才能控制台登录此对象

所以,当我登录这个

console.log($scope.data) 

比我在网页上的控制台找回

$$state: Object 
status: 1 
    value: Array[11] 
    0: Object 
    1: Object 
    2: Object 
    3: Object 
    4: Object 
    5: Object 
    6: Object 
    7: Object 
    8: Object 
    9: Object 
    10: Object 

我只想说,

console.log($scope.data.value[0]) 

给我的只是价值中的第一个对象。 但我只使用任何我尝试使用的未定义。 我错过了什么,我不能单独得到我的价值的对象。 Maby这是一个角度的事情,因为$$,但即时通讯有点现在。

张贴我的代码

Here is a screenshot of what I get when I console log the data

更新如何得到我的数据:

(function() { 
'use strict'; 
angular 
    .module('testApp') 
    .factory('storage', storage); 

storage.$inject = ['$http']; 

function storage($http) { 
    return { 
     getData: getData 
    }; 

    function getData() { 
     return $http.get('http://localhost:4040/') 
      .then(complete) 
      .catch(failed); 

     function complete(response) { 
      var merge = data.teams.map (function (data) { 
       data.members = response.data.filter (function (person) { 
        return person.room == data.rooms 
       }); 
       return data; 
      }); 
      return merge; 
     } 

     function failed(error) { 
      console.log('getting the data has failed' + error.data); 
     } 
    } 
} 
})(); 

服务

(function() { 
'use strict'; 
angular 
    .module('testApp') 
    .service('testStorage', testStorage); 

testStorage.$inject = ['storage']; 

function testStorage(storage) { 
    //Create empty variables 


    //Data in variables 
    var allData = storage.getData(); 

    //Return functions 
    var service = { 
     getAll: getAll 
    }; 

    return service; 

    /////////////////////////// 
    // Create functions here // 
    /////////////////////////// 

    function getAll() { 
     return allData; 
    } 

} 
})(); 

,并最终我的控制器

(function() { 
'use strict'; 

angular 
    .module('testApp') 
    .controller('tryOutController', tryOutController); 

tryOutController.$inject = ['$scope', 'testStorage']; 

function tryOutController($scope, testStorage) { 
    $scope.data = {}; 
    $scope.data = testStorage.getAll(); 

    console.log($scope.data); 

} 
})(); 
+2

你可以像'$ scope.data。$$ state.value [0]'那样访问它,但这不是你应该做的。发布代码以获得更好的解决方案你如何填充这个'$ scope.data'? – dfsq

+0

叶我也会说,但我回来'TypeError:无法读取属性未定义'0'。但不知道如何重新创建这个问题,因为它对我来说是非常新的,也从来没有遇到过麻烦。 – Dennis

+0

不要重新创建问题,发布代码,如何填充$ scope.data? – dfsq

回答

3

所以问题是,你想它的填充之前访问您的数据。使用适当的承诺功能:

function tryOutController($scope, testStorage) { 
    $scope.data = {}; 
    testStorage.getAll().then(function(data) { 
     $scope.data = data; 
     console.log($scope.data); 
    }); 
} 
+0

你是那个问题,非常感谢。在创建要发回的功能的服务中使用承诺还是仅在控制器中使用承诺更好?更新:没关系,我没有说任何哈哈 – Dennis

2

这听起来像你记录对象之前,它的值。在许多浏览器(如Chrome浏览器)上,控制台会记录对控制台稍后扩展它的对象的引用。这意味着当您稍后在控制台中展开对象时,您会看到,然后是的值,而不是它们在您记录对象时的值。

所以,如果console.log($scope.data.value[0])正显示出你undefinedconsole.log($scope.data)显示了一个value数组里面,当你展开它,拥有它的值是,这意味着它得到了填补它被记录后。

但是:看你的第一个例子,我认为你应该看看$scope.data.$$state.value[0],而不是$scope.data.value[0]

+2

Chrome应该在最初记录的项目旁边有一个蓝色的“i”图标,以表明它正在执行此操作。 –

+0

这是有道理的,因为我每次随机值从自定义节点API生成数据。所以我应该把我的服务放在服务器上,像监视器一样,当有什么东西被注入时等待,然后把它放到控制器上。 – Dennis

-2

下面的代码将“stringify”(转换为字符串表示形式)传递给它的任何对象。所以,你的情况你有一个对象数组,所以这将打印该数组中的第一个。

console.log(JSON.stringify($scope.data.value[0])); 

你可以走得更远,并使用一个for循环迭代这个数组并打印出每个依次为:

for(var i = 0; i < $scope.data.value.length; i++) { 
    console.log(JSON.stringify($scope.data.value[0])); 
    // For spacing... 
    console.log('---------------------'); 
} 
+0

这是为什么这么糟糕的答案? – Katana24

+1

不管它是否正确,它只是一个没有任何解释的代码转储,以及在那个语法错误的未格式化代码。 –

+0

这很公平 - 我仍然会编辑这个帖子 – Katana24

相关问题