我在Angular控制器中遇到了令人沮丧的问题。我试图有条件地设置我附加到我的范围的对象的某些字段的值。下面的if
块可以完美地运行,但是只要我添加else
块,就会遇到以下错误:
TypeError: Cannot assign to read only property 'gameType' of true
var getGames = function() {
var defer = $q.defer();
playersService.getGames({
playerId: playerId
}).$promise.then(function(data) {
vm.games = data;
for (var x in vm.games) {
if (vm.games[x].activity_type === 'preseason') {
vm.games[x].gameType = 'preseason';
} else {
vm.games[x].gameType = vm.games[x].type;
}
}
defer.resolve(data);
});
return defer.promise;
};
在console.log
块中vm.games[x]
else
之后,我看到我遇到错误时发生了错误:
Promise {$$state: Object}
true
......而其他所有行都显示:
Resource {id: "...", ...}
答案 0 :(得分:1)
不要在数组上使用for in
循环,使用标准for
循环。 for in
用于迭代对象的属性。这可能会在分配属性值时造成一些打嗝。
答案 1 :(得分:0)
您的vm.games[x].gameType
数据类型和vm.games[x].type;
数据类型可能不同。
如果您的if条件完美无缺,那么您可以尝试
if (vm.games[x].activity_type === 'preseason') {
vm.games[x].gameType = 'preseason';
} else {
vm.games[x].gameType = ''+ vm.games[x].type; // ''+ is convert to string
}