我们的移动应用程序正在获取" TypeError:尝试分配给只读属性。"仅在IOS 8上,堆栈跟踪没有帮助,似乎是在Angular代码中。
这可能是因为"使用严格"在Angularjs代码的顶级。 我的问题是(1)为什么它只在IOS8上开始?这是一个IOS8错误吗? (2)或者这是一个在IOS8上浮现的有角虫? (3)或许我们违反了严格的模式规则,但只有IOS8才开始抓住它们!我对第三个选项持怀疑态度,因为其他主要浏览器都是strict mode is supported。
我发现了一个类似报道的问题here。
答案 0 :(得分:11)
看起来这是IOS8 bug
至少ember.js的人会暂时从他们的代码中删除'use strict',直到它被修复。 Ember.js issue
答案 1 :(得分:5)
解决方案 - 注意:
对于我们来说,从SQL promise值传回的值是一个对象数组。
我们获得的价值"只读"错误是字符串,bools和数字。
console.log('this will log');
sqlReturnArray[0].name = "Bob"; // read only error here
console.log('wouldnt get to here to log');
我想,如果我不能为数组中的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);
});
答案 2 :(得分:0)
我有一张表格。
我的问题是因为将SQL返回对象绑定到输入。
在解决angular.copy()
问题后,
尝试复制返回值并重试。
$scope.yourFunc= function(result) {
var item = angular.copy(result.rows.item(0));
...
};
答案 3 :(得分:0)
我刚刚遇到此错误,修复非常简单。
我的代码是 -
$http.get('/api/v1/somedata').then(function(result){
$scope.data.somedata = result.data.list;
});
我在assign中得到了TypeError。因为我没有在任何地方定义$scope.data.somedata
,而是$scope.data
undefined
,并尝试为其分配一些属性,从而启动了错误。
我只是将$scope.data = {somedata : [] }
放在控制器的顶部。我也可以通过将$scope.data.somedata
更改为$scope.somedata
来消除此错误,因为$scope
undefined
对象的任何属性都将以$rootscope
结尾,不会给出任何错误。我发现这很难调试我的视图模型。而且对于这个TypeError,我可以找出究竟是什么错误。