无法分配给只读属性“x”的真

时间:2015-08-18 15:13:01

标签: javascript angularjs

我在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: "...", ...}

2 个答案:

答案 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
      }