我想創建一個工廠,它向某些API發出ajax請求,然後返回一個數據對象。我的代碼是:從工廠傳遞對象到控制器
app.factory('Test', function($http, $q) {
var data = {response:{}};
var getMessages = function() {
$http.get('https://someapi.com').then(
function(jsonAPI) {
var dataObj = {};
var messages = [];
$.each(jsonAPI.data.data, function(x, data) {
dataObj[x] = data;
$.each(jsonAPI.data.included, function(y, included) {
if(data.relationships.sender.data.id == included.id) {
dataObj[x].sender = included;
}
});
messages.push(dataObj[x]);
});
data.response = messages;
},
function(errorResponse) {
// todo handle error.
}
);
};
getMessages();
return {
data
};
});
然而,當我嘗試刪除所創建的數據對象中的「響應」屬性,有data = messages
,而不是data.response = messages
數據對象沒有被填滿。如果我在試用console.log(Test.data['response'])
時將響應屬性保存在我的控制器中,則會收到一個空對象。 console.log(Test.data)
雖然返回一個有效的對象。我在這裏錯過了什麼?
這將致力於填充視圖如果通'data.response'通過範圍....但你有問題,它記錄因爲'$ http'是異步的。當你使它成爲一個原始的時候沒有繼承,所以角度不會檢測到變化 – charlietfl
@charlietfl那麼我怎樣才能記錄Test.data而不是Test.data ['response']? –
回覆諾言更常見......並且在諾言回調中設置範圍。會在一分鐘內給你解決方案 – charlietfl