如何在 html.eex 模板中使用 NPM 库中的函数
How to use function from NPM library in html.eex template
使用带有 webpack 的 Phoenix 1.4,我将 "findandreplacedomtext": "^0.4.6"
添加到我的 package.json 文件并安装了库。
现在 app.js 我有 import findAndReplaceDOMText from 'findandreplacedomtext';
并且允许我使用库,但它只在 app.js 文件中工作 .我希望能够在我的视图模板中使用该库,但每当我尝试在模板中使用它时,我都会在控制台中收到错误 Uncaught ReferenceError: findAndReplaceDOMText is not defined
。
我的模板中的代码如下所示:
<div id="container">
This is a test.
</div>
<script>
findAndReplaceDOMText(document.getElementById('container'), {
find: 'test',
wrap: 'mark'
});
</script>
这会在控制台中引发错误。但是,如果我将相同的 javascript 代码放在 app.js 库的导入语句下方,它就可以工作。如何在视图模板内部和 app.js 外部使用库?
错误出在你的 js 中,你通过 id 'container' 选择了一个元素,但它是一个 class,所以它应该是:
findAndReplaceDOMText(document.getElementsByClassName('container')
在 webpack.config.js 的顶部我放置了 const webpack = require('webpack');
以便在插件列表中我可以放置 new webpack.ProvidePlugin({findAndReplaceDOMText: "findandreplacedomtext"})
。这样我就可以从 app.js.
中删除库的导入语句
然后,在 app.js 中,我放入 window.findAndReplaceDOMText = findAndReplaceDOMText;
以便在 app.js 之外公开模块。
最后,在我的模板中,我必须将函数包装在内容加载事件中,以确保我没有在函数加载之前调用它。
<script>
document.addEventListener("DOMContentLoaded", function(event) {
findAndReplaceDOMText(document.getElementById('container'), {
find: 'test',
wrap: 'mark'
});
});
</script>
使用带有 webpack 的 Phoenix 1.4,我将 "findandreplacedomtext": "^0.4.6"
添加到我的 package.json 文件并安装了库。
现在 app.js 我有 import findAndReplaceDOMText from 'findandreplacedomtext';
并且允许我使用库,但它只在 app.js 文件中工作 .我希望能够在我的视图模板中使用该库,但每当我尝试在模板中使用它时,我都会在控制台中收到错误 Uncaught ReferenceError: findAndReplaceDOMText is not defined
。
我的模板中的代码如下所示:
<div id="container">
This is a test.
</div>
<script>
findAndReplaceDOMText(document.getElementById('container'), {
find: 'test',
wrap: 'mark'
});
</script>
这会在控制台中引发错误。但是,如果我将相同的 javascript 代码放在 app.js 库的导入语句下方,它就可以工作。如何在视图模板内部和 app.js 外部使用库?
错误出在你的 js 中,你通过 id 'container' 选择了一个元素,但它是一个 class,所以它应该是:
findAndReplaceDOMText(document.getElementsByClassName('container')
在 webpack.config.js 的顶部我放置了 const webpack = require('webpack');
以便在插件列表中我可以放置 new webpack.ProvidePlugin({findAndReplaceDOMText: "findandreplacedomtext"})
。这样我就可以从 app.js.
然后,在 app.js 中,我放入 window.findAndReplaceDOMText = findAndReplaceDOMText;
以便在 app.js 之外公开模块。
最后,在我的模板中,我必须将函数包装在内容加载事件中,以确保我没有在函数加载之前调用它。
<script>
document.addEventListener("DOMContentLoaded", function(event) {
findAndReplaceDOMText(document.getElementById('container'), {
find: 'test',
wrap: 'mark'
});
});
</script>