2017-04-23 74 views
1

這讓我瘋狂。我有一個非常簡單的「問題」,花了我幾個小時,仍然不知道發生了什麼。異步數組沒有使用任何異步?

我有一個從父服務繼承的子服務(我正在使用ES6)。構造函數接受一個名爲options的參數。 options將被分配到this._defaults

現在在我將options傳入我的對象(new Service(options))之前,我用一些數據填充了options。爲了保持它的簡單,我現在options物體看起來是這樣的:

const options = { 
    types: [] 
} 

現在我添加一些東西到類型數組,像這樣:

const Types = { 
    standard: { 
    some: 'data' 
    }, 
    freeroll: { 
    some: 'data' 
    }, 
    mainevent: { 
    some: 'data' 
    }, 
    qualifier: { 
    some: 'data' 
    } 
}; 

angular.forEach(Types, (val, key) => { 
    options.types[key] = true; 
}); 

我給你我的服務,這樣的範圍:

$scope.service = new Service(options) 

並使用控制檯輸出服務。控制檯現在說_defaults.types的值是Array(0)。當我點擊數組時,會顯示正確的值,但範圍不知道。

那是怎麼回事? Array(0)是不是意味着在console.log()時,該數組中沒有填充任何值,但後來呢?像異步函數會做什麼?

Here is a plunk of my problem

回答

2

問題是types是一個數組,你把它當作普通的對象來對待。你可以通過兩種方式解決這個問題。

首先只是改變types到對象:

const options = { 
    types: {} 
}; 

或者,如果你需要一個數組,改變你如何將項目添加到數組:

angular.forEach(Types, (val, key) => { 
    options.types.push({ 
     type: key, 
     value: val 
    }); 
}); 

請注意,這只是一種將對象轉換爲數組的方式,您最終得到的數據結構取決於您。

+0

的確如此。應該提到的是,JSON.stringify的工作方式,由json過濾器在內部使用。 – estus

+0

那麼我應該說什麼。這是一個容易犯的錯誤,我沒有看到它。完全合理,謝謝。 – Fortuna

+0

沒問題 - 當你看代碼太長時間(特別是你自己)很難看到像括號和大括號的小殺手 – gonzofish