Angular.js: El enlace de marcador de posición de área de texto provoca una excepción en IE11

Creado en 19 nov. 2013  ·  23Comentarios  ·  Fuente: angular/angular.js

Ver el siguiente violín:

http://jsfiddle.net/provegard/wLBwd/

Mientras aparece el marcador de posición correcto, también obtengo el siguiente seguimiento de pila en la consola:

Error: Invalid argument.
   at interpolateFnWatchAction (http://code.angularjs.org/1.2.1/angular.js:6366:15)
   at $digest (http://code.angularjs.org/1.2.1/angular.js:11443:21)
   at $apply (http://code.angularjs.org/1.2.1/angular.js:11682:13)
   at Anonymous function (http://code.angularjs.org/1.2.1/angular.js:1285:9)
   at invoke (http://code.angularjs.org/1.2.1/angular.js:3616:18)
   at doBootstrap (http://code.angularjs.org/1.2.1/angular.js:1283:5)
   at bootstrap (http://code.angularjs.org/1.2.1/angular.js:1297:5)
   at angularInit (http://code.angularjs.org/1.2.1/angular.js:1246:5)
   at Anonymous function (http://code.angularjs.org/1.2.1/angular.js:20126:5)
   at trigger (http://code.angularjs.org/1.2.1/angular.js:2298:7)

La versión de IE es 11.0.9600.16438

IE10 IE11 low investigation broken expected use

Comentario más útil

Como sugieren los documentos: la forma más fácil de abordar estos problemas es cambiar de placeholder="{{value}}" a ng-attr-placeholder="{{value}}" .

Todos 23 comentarios

También sucede en ie10, al intentar acceder a nodeValue en un TextNode sin padres (nodeType=3)

// in function addTextInterpolateDirective()
node[0].nodeValue = value

Puede estar relacionado con https://github.com/angular/angular.js/issues/2614 ??

Aquí hay una solución temporal... http://stackoverflow.com/a/20649762/1009125

Sigo prefiriendo el rastreo de capacidad sobre el rastreo de agente de usuario... Vea mi publicación en #2614

Suena genial, pero ¿qué capacidad podría probarse en este caso? Es decir... ugh

La capacidad de no generar un evento cuando cambia el marcador de posición (como el
fragmento que publiqué en el otro número (creo que todavía se aplica))
El 17 de diciembre de 2013 a las 21:24, "Ender2050" [email protected] escribió:

Suena genial, pero ¿qué capacidad podría probarse en este caso? Es decir... ugh


Responda a este correo electrónico directamente o véalo en Gi tHubhttps://github.com/angular/angular.js/issues/5025#issuecomment -30818022
.

Como sugieren los documentos: la forma más fácil de abordar estos problemas es cambiar de placeholder="{{value}}" a ng-attr-placeholder="{{value}}" .

@seckardt Genial, no sabía sobre ngAttr . Escribí una directiva personalizada como solución alternativa, pero ahora puedo deshacerme de ella.

Veo que está en la Guía para desarrolladores/Directivas en los documentos, pero no en la referencia de la API. ¿No sería una buena idea tenerlo allí también?

Sin embargo, esto no es solo el enlace placeholder que arroja este error. Esto falló con el mismo comportamiento:

<textarea ng-model="foo">{{ foo }}</textarea>

La interpolación es redundante, por lo que la solución en este caso fue simplemente eliminar {{ foo }} , pero es un poco molesto que el mensaje de error para esto sea tan inútil. Pasé varias horas resolviendo esto antes de encontrar el problema.

Este error ocurre también al configurar el estilo style="padding: 3px; background: {{l.Color}}; opacity: 0.7; border-radius: 5px"

¿Cómo puedo sustituir esta expresión de manera que funcione con IE?

Este es un problema conocido con IE. Como se mencionó anteriormente, puede usar ng-attr-style="..." .

Cualquiera que reciba este error solo busque los argumentos enviados para textarea.

Estoy usando angular 1.2.28. Tuve el mismo error.
<textarea ng-model="data">{{data}}</textarea> funciona bien en Mozilla. Pero, IE 11 da un error de argumento no válido. para este fragmento de código.
Solución:
<textarea ng-model="data"></textarea> O <textarea>{{data}}</textarea>
Parece que vincularse a ng-model y poner valor directamente causa este error, que también es lógico.
Solo pensé que esto podría ser de ayuda. De todos modos, este post me ayudó mucho.

Este error ocurre porque (por el motivo que sea) IE convierte temporalmente <textarea placeholder="{{'foo'}}"></textarea> en <textarea placeholder="{{ 'foo' }}">{{ 'foo' }}</textarea> . Esto agrega la directiva de interpolación de texto implícita en {{ 'foo' }} TEXT_NODE, pero cuando Angular intenta establecer el valor de TEXT_NODE, IE lo ha eliminado nuevamente.

Y tratar de establecer el nodeValue de un TEXT_NODE sin padres (por ejemplo parentlessTextNode.nodeValue = 'foo' ) arroja IE.

Creo que este no es un problema relacionado con Angular y (teniendo en cuenta que existe una solución razonable: usar ng-attr-placeholder ) deberíamos documentarlo y seguir adelante.

Este informe de error parece relevante. Parece que el valor del marcador de posición se mantendría como el contenido <textarea> . Lo han arreglado (al menos en el último IE11), pero no al 100%; es decir, el texto del marcador de posición aparece como contenido, aunque solo temporalmente.

En mi caso, ni siquiera tengo un marcador de posición. Acabo de tener algo similar a este <textarea ng-model='$parent.freetext.text' >{{dataobject.text}}</textarea> y sigo recibiendo el error de interpolación. Cualquier idea/solución es muy apreciada. Para tu información, estoy usando la versión 1.5 de angularjs...

@LotusShiv , no ponga ningún valor en su área de texto. Si desea inicializarlo, coloque el valor en el modelo.

Entonces, gkalpak : en mi caso, necesito vincularme al valor existente de una llamada WebAPI y también permitir que el usuario edite el área de texto. Por lo tanto, tenía la configuración de valor de ng-model y textarea. Ahora, la forma en que entendí de su respuesta es que: tengo que establecer el valor que proviene de la llamada WebAPI a una variable de objeto de $scope y usar la misma variable de objeto de $scope para configurar los contenidos editados también. ¿Te estoy entendiendo bien? Nuevamente, gracias de antemano por cualquier sugerencia/solución. El código de muestra también es apreciado....

Anexo a mi comentario anterior, hice exactamente lo que expliqué de lo que entendí de la sugerencia de gkalpak y funcionó. Gracias gkalpak , funciona bien en IE 11 . Ahorró muchos dolores de cabeza.... :) después de días de probar tantos otros consejos y trucos....

Como muchas de las personas anteriores han mencionado, este error es de hecho un error de uso, en mi caso no estaba en un área de texto, pero los comentarios anteriores realmente ayudaron. Gracias a todos :)
Pondré mi problema específico y lo solucionaré a continuación para otros que puedan estar en la misma situación.

No funciona;
<a concat="[result.responsible.Contact.firstName, result.responsible.Contact.lastName]">{{responsibleFullName}}</a>
Trabajando;
<a>{{result.responsible.Contact.firstName}} {{result.responsible.Contact.lastName}}</a>

También encontré este problema, para mí era template attr en la directiva. Cuando use solo template: '{{field}}' obtendrá este error. Para mí, estaba reemplazando el elemento HTML con contenido compilado, por lo que la solución fue eliminar {{field}} y dejarlo solo con template: '' , pero este es un error extraño y depurarlo en IE es doloroso :(

Lo mismo con el enlace rows para el textarea , y sí, IE no me estaba dando NINGUNA pista hasta que tuve que activar el modo "romper en cada excepción" y pasar mil millones de excepciones de primera oportunidad. La información de depuración angular en la excepción también solo me indicó el componente, pero no el problema. De todos modos, se solucionó cambiando el enlace de [rows]="myRowsField" a [attr.rows]="myRowsField"

@seckardt me alegras el día. Uno de mis proyectos muy antiguos todavía se basa en Angular1, luchando por encontrar una solución a este problema. Muchas gracias.

Incluso si hay una "solución fácil", sería mucho más fácil si el mensaje de error fuera un poco más útil. Tengo un gran proyecto y _en algún lugar_ existe esta doble interpolación. ¿Cómo se supone que voy a encontrar esto?

¿Fue útil esta página
0 / 5 - 0 calificaciones