请参阅以下小提琴:
http://jsfiddle.net/provegard/wLBwd/
当出现正确的占位符时,我还在控制台中获得以下堆栈跟踪:
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)
IE版本为11.0.9600.16438
也发生在 ie10 中,试图访问无父 TextNode 上的 nodeValue (nodeType=3)
// in function addTextInterpolateDirective()
node[0].nodeValue = value
这是一个临时解决方法... http://stackoverflow.com/a/20649762/1009125
我仍然更喜欢能力嗅探而不是用户代理嗅探.....参见我在 #2614 上的帖子
听起来不错,但在这种情况下可以测试哪些功能? 即....呃
占位符更改时不引发事件的能力(例如
我在另一个问题中发布的片段(我认为它仍然适用))
2013 年 12 月 17 日 21:24,“Ender2050” [email protected]写道:
听起来不错,但在这种情况下可以测试哪些功能? 即....呃
—
直接回复此邮件或在 Gi tHub上查看 https://github.com/angular/angular.js/issues/5025#issuecomment -30818022
.
正如文档所建议的那样:解决此类问题的最简单方法是从使用placeholder="{{value}}"
切换到ng-attr-placeholder="{{value}}"
。
@seccardt酷,我不知道ngAttr
。 我写了一个自定义指令作为解决方法,但现在我可以摆脱它了。
我看到它在文档中的开发人员指南/指令下,但不在 API 参考中。 把它也放在那里不是一个好主意吗?
不过,这不仅仅是placeholder
绑定会引发此错误。 这以相同的行为失败:
<textarea ng-model="foo">{{ foo }}</textarea>
插值是多余的,因此在这种情况下的解决方法只是删除{{ foo }}
,但它的错误消息是如此无用,这有点烦人。 在发现问题之前,我花了几个小时解决这个问题。
设置样式style="padding: 3px; background: {{l.Color}}; opacity: 0.7; border-radius: 5px"
时也会发生此错误
如何以与 IE 一起使用的方式替换此表达式?
这是 IE 的一个已知问题。 如上所述,您可以使用ng-attr-style="..."
。
任何收到此错误的人只需查找为 textarea 发送的参数。
我正在使用 angular 1.2.28 我有同样的错误。
<textarea ng-model="data">{{data}}</textarea>
在 Mozilla 中运行良好。 但是,IE 11 给出了无效参数错误。 对于这段代码。
解决方案:
<textarea ng-model="data"></textarea>
或<textarea>{{data}}</textarea>
看起来绑定到 ng-model 并直接输入值会导致这个错误,这也是合乎逻辑的。
只是认为这可能会有所帮助。 不管怎样,这篇文章对我帮助很大。
发生此错误是因为(无论出于何种原因)IE 临时将<textarea placeholder="{{'foo'}}"></textarea>
转换为<textarea placeholder="{{ 'foo' }}">{{ 'foo' }}</textarea>
。 这在{{ 'foo' }}
TEXT_NODE 上添加了隐式文本插值指令,但是当 Angular 尝试设置 TEXT_NODE 的值时,它已被 IE 再次删除。
并尝试在 IE 中设置无父 TEXT_NODE 的nodeValue
(例如parentlessTextNode.nodeValue = 'foo'
)。
我认为这不是与 Angular 相关的问题,并且(考虑到有一个合理的解决方法 - 使用ng-attr-placeholder
)我们应该记录它并继续前进。
这个错误报告似乎是相关的。 占位符值似乎会保留为<textarea>
的内容。 他们已经修复了这个问题(至少在最新的 IE11 中),但不是 100%; 即占位符文本确实显示为内容,尽管只是暂时的。
就我而言,我什至没有占位符。 我只是有类似于这个<textarea ng-model='$parent.freetext.text' >{{dataobject.text}}</textarea>
的东西,但我仍然得到插值错误。 非常感谢任何想法/解决方案。 仅供参考,我正在使用 1.5 版本的 angularjs ......
@LotusShiv ,不要在您的文本区域中输入任何值。 如果要初始化它,请将值放在模型上。
所以gkalpak - 在我的情况下,我需要绑定到来自 WebAPI 调用的现有值,并且还允许用户编辑文本区域。 因此我有 ng-model 和 textarea 值设置。 现在我从您的回复中了解到的方式是 - 我必须将来自 WebAPI 调用的值设置为 $scope 对象变量,并使用相同的 $scope 对象变量来设置编辑的内容。 我对你的理解正确吗? 再次提前感谢任何建议/解决方案。 示例代码也很受欢迎....
我之前的评论的附录,我完全按照我从 gkalpak 的建议中解释的内容进行了解释,并且它奏效了。 感谢gkalpak ,在IE 11中工作得很好。 在尝试了这么多其他技巧和窍门之后,节省了很多心痛.... :)
正如上面许多人提到的那样,这个错误实际上是一个使用错误,在我的情况下,它不在文本区域中,但上面的评论确实有帮助。 感谢大家 :)
将为可能处于相同情况的其他人提出我的具体问题并在下面修复。
不工作;
<a concat="[result.responsible.Contact.firstName, result.responsible.Contact.lastName]">{{responsibleFullName}}</a>
在职的;
<a>{{result.responsible.Contact.firstName}} {{result.responsible.Contact.lastName}}</a>
也遇到了这个问题,对我来说是指令中的template
attr。 当您仅使用template: '{{field}}'
时,您将收到此错误。 对我来说,我用编译的内容替换元素 HTML,所以解决方案是删除{{field}}
并只保留template: ''
,但这是一个奇怪的错误,在 IE 中调试它很痛苦:(
与textarea
的rows
绑定相同,是的,IE 没有给我任何线索,直到我不得不打开“每次异常中断”模式并逐步完成十亿个第一次机会例外。 异常中的 Angular 调试信息也只指出了该组件,而不是它有什么问题。 无论如何,通过将绑定从 [rows]="myRowsField" 更改为 [attr.rows]="myRowsField"
@seccardt你让我开心。 我的一个非常老的项目仍然基于 Angular1,努力寻找解决这个问题的方法。 非常感谢。
即使有一个“简单的解决方法”,如果错误消息更有帮助,它也会容易得多。 我有一个巨大的项目,并且_somewhere_有这个双插值。 我该怎么找到这个?
最有用的评论
正如文档所建议的那样:解决此类问题的最简单方法是从使用
placeholder="{{value}}"
切换到ng-attr-placeholder="{{value}}"
。