Chr*_*oba 5 javascript vue.js vue-component vuejs2
精简版:
我在组件的方法中使用HTML生成一个字符串,我无法弄清楚如何使用作用域CSS来设置HTML样式,因为它缺少作用域的数据属性.
版本略长:
我有一个名为highlight的函数,它接受一个字符串并返回一个HTML字符串,其中突出显示所有出现的搜索词,意思是用a包围<span class="match">
.但是,由于我是在字符串中手动执行此操作,因此该跨度不会获得我的Vue组件中的作用域CSS需要工作的特殊数据属性,因此我对这些匹配进行样式设置的唯一方法是创建我的CSS没有范围,我不想这样做.是否有更多Vue特定的方式让我这样做?该函数如下所示:
// Source: http://stackoverflow.com/a/280805/2874789
function highlight(data, search) {
return data.replace(
new RegExp("(" + preg_quote(search) + ")", 'gi'),
"<span class=match>$1</span>"
);
}
Run Code Online (Sandbox Code Playgroud)
(preg_quote只是一个逃避需要转义的东西的函数)
谢谢!
动态生成的内容 使用 v-html 创建的 DOM 内容不受范围样式的影响,但您仍然可以使用深度选择器设置它们的样式。
似乎没有 VueJS 特定的方法。听起来您最好的选择是在突出显示函数的输出中内嵌样式,或者使用全局类。
function highlight(data, search) {
return data.replace(
new RegExp("(" + preg_quote(search) + ")", 'gi'),
"<span class=match>$1</span>"
);
}
<style>
.match {
color: yellow;
}
</style>
Run Code Online (Sandbox Code Playgroud)
或者
function highlight(data, search) {
return data.replace(
new RegExp("(" + preg_quote(search) + ")", 'gi'),
"<span style="{ color: yellow }">$1</span>"
);
}
Run Code Online (Sandbox Code Playgroud)
你也可以尝试深度选择器,但我自己对它们不是很熟悉。
https://vue-loader.vuejs.org/en/features/scoped-css.html
这是一件有趣的事。
不知道如何单独使用样式来解决这个问题,但我认为我们可以使用 css 模块(也在范围内)scoped
通过附加元素来解决它。<style>
我当时想的是:
<style scoped>
...
</style>
<style module>
.match {
color: red;
}
</style>
Run Code Online (Sandbox Code Playgroud)
然后,在您的替换功能中您可以执行以下操作:
`<span class="${this.$style.match}">...</span>`
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关 vue-loader 的 CSS 模块支持的更多信息:
http://vue-loader.vuejs.org/en/features/css-modules.html
归档时间: |
|
查看次数: |
1017 次 |
最近记录: |