【发布时间】:2015-10-19 05:51:37
【问题描述】:
我不确定应该使用什么关键字来搜索我的问题。但是我一直在墙上敲了三个小时,试图看看这里出了什么问题。它只是一个简单的将对象推入数组。问题是,当我尝试 console.log 数组值时,两个 object 键的值被更改。我在一个 AngularJS 控制器中写这个。
这是我放在服务上的示例对象:
onbd.data.add = {
predefined: [{
activity : 'morning jog',
purpose : 'grow',
days : '0 1 2 3 4 5 6',
start : '05:30',
stop : '06:00',
meta : 'repeats everyday on 5:30 AM for half an hour'
}]
};
在控制器中,这里是在ng-click事件上调用的函数,它将把服务中的数据推送到AJAX数据数组中:
th.setActivity = function (data) {
// the data is one of the object inside the predefined
// key from the service above
var newAct = {
activity : data.activity,
purpose : data.purpose,
day : data.days,
start : data.start,
stop : data.stop
};
th.list.push(newAct);
};
这是我从console.log('newAct', newAct)得到的:
newAct Object {
activity: "morning jog",
purpose: "grow",
day: "0 1 2 3 4 5 6",
start: "05:30",
stop: "06:00"
}
这是正确的,但这是我console.log('list', th.list);时得到的:
list [Object]
0: Object
$$hashKey: "object:136"
activity: "morning jog"
day: "0 1 2 3 4 5 6"
purpose: "grow"
start: "05:30"
stop: "06:00"
length: 1
__proto__: Array[0]
请注意,day 和 purpose 的键已更改。仅当我执行 th.setActivity 函数时才会发生这种情况。有什么想法为什么会出现这种奇怪的行为?
非常感谢。
【问题讨论】:
-
对象通过引用传递,控制台(在 chrome 中)将尝试提供帮助并保持该引用是最新的。这些值是否在其他地方被修改?
-
不,它们没有被修改。我还有另一个类似的功能,它将处理来自
form的数据输入,而不是服务上的预定义数据。但是那个工作没有任何问题。 -
由于你是通过
ajax获取数据,这是异步的,我猜你需要$scope.$apply。 -
你能在 th.list.push(newAct) 之前检查 console.log('newAct', newAct);行
-
@Joy 我想你误会了,我不使用 AJAX 来提供预定义的数据,它被硬编码在服务上以便在控制器之间共享。但是这些数据稍后将通过 AJAX 发送到
POSTed,这是我在服务器端收到错误的地方,因为密钥的值已更改。
标签: javascript arrays angularjs object