img - ng-required angularjs
TypeError: Intentó asignar a la propiedad de solo lectura. en la aplicación Angularjs en iOS8 Safari (4)
Nuestra aplicación móvil obtiene "TypeError: se intentó asignar a la propiedad de solo lectura". solo en IOS 8 y las trazas de pila no son útiles y parecen estar en código angular.
Esto podría estar sucediendo debido al "uso estricto" en el nivel superior del código Angularjs. Mis preguntas son (1) ¿por qué comenzó a suceder solo en IOS8? ¿Es esto un error IOS8? (2) o es esto un error angular surgido en IOS8? (3) O tal vez estamos violando las reglas de modo estrictas, ¡pero solo IOS8 comenzó a atraparlos! Soy escéptico sobre la tercera opción porque el modo estricto es compatible con otros navegadores principales.
He encontrado un problema reportado similar aquí .
Lo tuve con un formulario. mi problema fue debido a un Objeto de Retorno SQL a una entrada. después de hacer frente al problema angular.copy () resuelto.
intente copiar sus valores devueltos y vuelva a intentarlo.
$ scope.yourFunc = function (result) {var item = angular.copy (result.rows.item (0)); ...};
SOLUCIÓN - Nota:
- angular.copy no funcionó para mí
- lodash cloneDeep tampoco funcionó.
- eliminando "uso estricto"; no ayudó - Simplemente eliminó el error que se registraba en un try / catch alrededor de la asignación "errónea" a un valor de solo lectura
Para nosotros, el valor que se estaba transfiriendo desde el valor de promesa de SQL era una matriz de objetos.
Los valores que obtuvimos como error de "solo lectura" fueron cadenas, bools y números.
console.log(''this will log'');
sqlReturnArray[0].name = "Bob"; // read only error here
console.log(''wouldnt get to here to log'');
Pensé, bueno, si no puedo asignar valores a las propiedades de ESOS objetos dentro de la matriz, ¿por qué no puedo copiar todos los valores de los objetos? La asignación de objetos es por referencia, por lo que simplemente hacer un ciclo sobre la matriz no ayudará. Debe pasar por encima de las claves y valores.
Esto resolvió nuestro problema
// 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);
});
Parece que esto es un error IOS8
Al menos los chicos de ember.js quitarán temporalmente el ''uso estricto'' de su código hasta que se solucione. Problema de Ember.js
Acabo de tener este error y la solución fue bastante simple.
Mi código era-
$http.get(''/api/v1/somedata'').then(function(result){
$scope.data.somedata = result.data.list;
});
Obtengo TypeError en la asignación. Debido a que no he definido $scope.data.somedata
ninguna parte y tiene $scope.data
undefined
y tratando de asignarle alguna propiedad, inició el error.
Simplemente puse $scope.data = {somedata : [] }
en la parte superior del controlador. También puedo deshacerme de este error cambiando $scope.data.somedata
por $scope.somedata
porque cualquier propiedad del objeto $scope
que undefined
está undefined
terminará en el $rootscope
y no dará ningún error. Descubrí que es bastante difícil depurar mi View-Model. Y también para este TypeError puedo descubrir qué es exactamente lo que está mal.