我有一个看起来像这样的标签:
{% partial "partials/vehicleform.html" vehicle=vehicles.empty_form %}
这只是呈现一个空表单。但现在我想将其输出传递给escapejs
过滤器,以便我可以在JavaScript变量中使用它。我怎么能这样做?
答案 0 :(得分:15)
许多代码支持as variablename
- 也就是说,简单地将as variablename
放在代码的末尾,然后将该代码的输出放在变量中而不是显示。
此{% partial %}
标记可能会支持此标记。这是一个例子,如果有:
{% partial "partials/vehicleform.html" vehicle=vehicles.empty_form as myvar %}{{ myvar|escapejs }}
如果相关标签是"Partial tag" snippet,那么它似乎不支持此标记。但它可能会被重写以支持它。
您可以使用“Capture template output as a variable”代码段,然后将过滤器应用于捕获的内容,如下所示:
{% captureas myvar %}{% partial "partials/vehicleform.html" vehicle=vehicles.empty_form %}{% endcaptureas %}{{ myvar|escapejs }}
答案 1 :(得分:1)
将数据转换为JS变量的另一种解决方案:
<div class="display:none" id="empty-vehicle-form">{% partial "partials/vehicleform.html" vehicle=vehicles.empty_form %}</div>
然后抓住并同时将其删除
var empty_form = $('#empty-vehicle-form').remove().html();
此解决方案的优点是您的其他JS脚本可以在将其从DOM中删除之前对其进行预处理。 escapejs
还会使用所有这些转义字符创建更大的文件大小。
答案 2 :(得分:1)
使用内置的
import { Component, AfterContentInit } from "@angular/core";
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements AfterContentInit {
obj;
go() {
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(response => response.json())
.then(json =>{
this.obj = json;
console.log(this.obj) // runs after `fetch` finishes and will log the modified value.
})
}
ngAfterContentInit() {
this.go();
console.log(this.obj) // this will run before `this.go()` you have to wait for it to finish.
// result is undefined
}
}
模板标记,也可以在没有任何外部依赖性的情况下将过滤器应用于模板标记的输出。来自documentation:
[此模板标签]通过一个或多个过滤器过滤块的内容。可以使用管道指定多个过滤器,并且过滤器可以具有参数,就像在可变语法中一样。
原始问题中的示例将这样写:
filter