nas*_*100 3 javascript ejs node.js
当我使用 NodeJS 将变量传递给我的 html 页面时,我可以使用内联脚本访问它,如下所示:
// passing myVar from the server
router.get('/', (req, res) => {
res.render('index', { myVar: 'test'});
});
// access in index.ejs
<script>
let myVar = <%- JSON.stringify(myVar) %>;
alert(myVar);
</script>
Run Code Online (Sandbox Code Playgroud)
如果我尝试在这里使用外部脚本而不是内联脚本,我会遇到使用 ejs 语法的错误<%- %>。如何在外部脚本中访问 myVar?
<%-和之间的代码%>是服务器端代码。
如果将其从 EJS 模板文件中移到静态 JS 文件中,则无法获取数据。它不会被替换,您会将 EJS 模板发送到浏览器,而不是在服务器上对其进行处理以生成文档。
如果您将其移出生成 HTML 的 EJS 模板文件并移入生成 JavaScript 的不同 EJS 模板文件中,那么它将正常工作(除了在您的服务器端代码中它将具有不同的 URL 和不同的端点,因此您将需要移动填充您尝试访问的变量的服务器端代码)。
您有两个合理的选择:
获取页面数据的一种:
<script>let myVar = <%- JSON.stringify(myVar) %>;</script>
Run Code Online (Sandbox Code Playgroud)
还有一个包含 JavaScript 逻辑:
<script src="/js/logic.js"></script>
Run Code Online (Sandbox Code Playgroud)
<div data-myVar="<%- JSON.stringify(myVar).replace(/"/g, """); %>">...</div>
Run Code Online (Sandbox Code Playgroud)
... 然后通过 DOM 访问它。
小智 5
您可以将变量放在 data-value 中,以便在脚本中使用 js 或 jquery 获取,例如:
查看ejs端:
<div class='test' data-test-value='<%= JSON.stringify(myVar) %'></div>
Run Code Online (Sandbox Code Playgroud)
js脚本端:
-如果你使用jquery:
var $test = $('.test').attr('data-test-value')
alert($test);
Run Code Online (Sandbox Code Playgroud)
-如果你使用 vanillaJs :
var test = document.getElementsByClassName('test');
var testValue = test[0].dataset.testValue;
alert(testValue)
Run Code Online (Sandbox Code Playgroud)
如果语法错误,我不会测试我的普通脚本,请参阅文档
| 归档时间: |
|
| 查看次数: |
3722 次 |
| 最近记录: |