放大器值替换到位

时间:2018-07-31 12:45:10

标签: javascript replace amp-html

我有一个amp列表,可以加载大量数据,并且可以很容易地在它们各自的占位符中显示它们。我打算做的是获取一个值并在其上运行一个简单的脚本。假设我有

<div>{{title}}</div>

标题为:“这是我的标题”

现在我想替换标题中的'-',我知道我可以使用title.replace(/-/g,' ')的javascript来做到这一点,我该怎么做呢? 我尝试过

<div>{{title.replace(/-/g,' ')}}</div>

但没有运气:(

2 个答案:

答案 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-listamp-bind确实接受[src]的对象,如文档中所述(我自己学习了一些新知识):{{ 3}} (已检查amp-list源代码,应该可以使用)