我有一个amp列表,可以加载大量数据,并且可以很容易地在它们各自的占位符中显示它们。我打算做的是获取一个值并在其上运行一个简单的脚本。假设我有
<div>{{title}}</div>
标题为:“这是我的标题”
现在我想替换标题中的'-',我知道我可以使用title.replace(/-/g,' ')
的javascript来做到这一点,我该怎么做呢?
我尝试过
<div>{{title.replace(/-/g,' ')}}</div>
但没有运气:(
答案 0 :(得分:2)
使用纯JavaScript进行以下操作:
title = 'This-is-my-title'; title.replace(/-/g, ' ');
给您"This is my title"
。
我猜测您使用的是角形,在这种情况下,{{}}中的文本不会被评估为纯JavaScript表达式。您可以编写一个角度滤波器以应用于表达式(如Angular filter to replace all underscores to spaces中所述)。在模板后面的控制器中处理此问题可能会更容易。像这样:
$scope.title = $scope.title.replace(/-/g,' ');
答案 1 :(得分:2)
好像您正在使用amp-mustache
。我认为这里没有办法在Mustache.js中使用自定义JavaScript,并且AMP的限制阻止您创建某种可以在{{}}
中调用的函数。我建议在发送之前在后端进行处理。 (遗憾的是,除了胡子,目前没有其他模板可用)
这里有一种使用amp-bind
的数学解决方法:AMP Mustache and Math
因此,可能是在使用amp-state
加载JSON之后,类似
myItems.map(entry => ({
myString: entry.myString.split('').map(c => c == '-' ? ' ' : c).join('')),
})
可能会工作(我尚未测试过自己,但值得尝试,在此处查看列入白名单的功能:https://www.ampproject.org/es/docs/reference/components/amp-bind#white-listed-functions),但在性能方面可能仍然很痛苦(amp-bind有很多开销)
编辑:这实际上看起来很有希望,只是发现amp-list
与amp-bind
确实接受[src]
的对象,如文档中所述(我自己学习了一些新知识):{{ 3}}
(已检查amp-list
源代码,应该可以使用)