TypeError:尝试分配给readonly属性.在iOS8 Safari上的Angularjs应用程序中

Sar*_*our 16 strict-mode angularjs ios8

我们的移动应用程序正在收到"TypeError:尝试分配给只读属性".仅在IOS 8上,堆栈跟踪没有帮助,似乎是在Angular代码中.

这可能是因为Angularjs代码的顶级"使用严格"而发生的.我的问题是(1)为什么它只在IOS8上开始?这是一个IOS8错误吗?(2)或者这是一个在IOS8上浮现的有角虫?(3)或许我们违反了严格的模式规则,但只有IOS8才开始抓住它们!我对第三个选项持怀疑态度,因为其他主流浏览器支持严格模式.

在这里找到了一个类似的报道问题.

小智 11

看起来这是一个IOS8错误

至少ember.js的人会暂时从他们的代码中删除'use strict',直到它被修复. Ember.js问题


Bri*_*orn 5

解决方案 - 注意:

  1. angular.copy对我不起作用
  2. lodash cloneDeep也没用.
  3. 删除"使用严格"; 没有帮助 - 它只是删除了在try/catch中记录的错误,将"错误"赋值转换为只读值

对于我们来说,从SQL promise值传回的值是一个对象数组.

我们得到"只读"错误的值是字符串,bool和数字.

console.log('this will log');
sqlReturnArray[0].name = "Bob"; // read only error here
console.log('wouldnt get to here to log');
Run Code Online (Sandbox Code Playgroud)

我想,如果我不能为数组中的THOSE对象的属性赋值,为什么我不能只复制所有对象的值?对象的赋值是通过引用的,所以只是在数组上做一个循环将无济于事.您需要遍历键和值.

这解决了我们的问题

// where sqlReturnArray is the object given from the SQL promise
var newArrayOfObjects = [];
angular.forEach(sqlReturnArray, function (obj) {
  var newObj = {};
  angular.forEach(obj, function (val, key) {
    newObj[key] = val;
  });
  newArrayOfObjects.push(newObj);
});
Run Code Online (Sandbox Code Playgroud)