在我的模板中,如果范围属性不可用,我想打印默认值:
{{myProperty || "default"}}
我正在使用"default"
字符串,并意识到尖括号<...>
会导致解析器在该表达式上中断。
所以这个
{{myProperty || "<default>"}}
不会发生滑动。
请参阅plunker:http://plnkr.co/edit/emxAdksZs5TGYz9Q84cI?p=preview
我在文档中找不到任何关于此的内容。在我看来,解析器应该按原样传递字符串文字,但我猜不是。有谁知道发生了什么?
答案 0 :(得分:2)
看起来问题实际上可能与浏览器有关。如果您注意到DOM中的第三个h2标记如下所示:
<h2>Say something: {{something || "<something>"}}</something></h2>
所以看起来浏览器将字符串解释为HTML标记。你需要做John所说的并逃避标签。或者您也可以在控制器上设置默认值,它将通过角度正确解释。
var myapp = angular.module('myapp', []);
myapp.controller('AppController', function($scope){
$scope.something = undefined || "<something>";
});
答案 1 :(得分:1)
不知道为什么解析器barf就可以了,但我可以告诉你&amp; lt;和&amp; gt;也可以替换&lt;和&gt;符号作为替代。
答案 2 :(得分:0)
正如其他人所提到的,问题是由浏览器和浏览器尝试修复DOM引起的。
此HTML <h2>Say something: {{something || "something"}}</h2>
按如下方式放在DOM树中
h2 node
text node //=> Say something: {{something || "something"}}
构建DOM后,角度来自并读取标记表达式的文本节点。
使用此HTML:Say something: {{something || "<a>"}}
DOM树看起来像:
h2 node
text node //=> Say something: {{something || "
<a> node
text node //=> "}}
文本节点不再在一起,因此没有有效的角度花括号表达式来处理,因此角度不起作用。
答案 3 :(得分:0)
在HTML中,引号对标记之外的解析器没有特殊含义,因此尖括号被读作新标记。尖括号会破坏您的代码,而不是解析器。