2017-04-23 29 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