2015-12-08 94 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

相關問題