我有以下简单的 vue 组件,其属性 data-hs-go-to-options 包含 json 数据。
<template>
<div>
<a
class="js-go-to go-to position-fixed"
href="javascript:;"
style="visibility: hidden"
data-hs-go-to-options='{
"offsetTop": 700,
"position": {
"init": {
"right": 50
},
"show": {
"bottom": 15
},
"hide": {
"bottom": -15
}
}
}'
>
<i class="fas fa-angle-up"></i>
</a>
</div>
</template>
当我构建 nuxt 应用程序并尝试使用以下命令获取数据属性时
$('.js-go-to').attr('data-hs-go-to-options')
我收到了:
"{
"
当我从上面的模板中删除 div 元素时,再次构建并运行命令,我得到了正确的内容:
"{
"offsetTop": 700,
"position": {
"init": {
"right": 50
},
"show": {
"bottom": 15
},
"hide": {
"bottom": -15
}
}
}"
带有 div 的渲染网站内容如下所示:
<div><a href="javascript:;" data-hs-unfold-options="{
"target": "#footerLanguage",
"type": "css-animation",
"animationIn": "slideInDown"
}" class="js-hs-unfold-invoker dropdown-toggle btn btn-xs btn-soft-secondary"></a></div>
没有像这样的div:
<a href="javascript:;" data-hs-unfold-options="{
"target": "#footerLanguage",
"type": "css-animation",
"animationIn": "slideInDown"
}" class="js-hs-unfold-invoker dropdown-toggle btn btn-xs btn-soft-secondary"></a>
我不知道为什么会这样,有人可以帮忙吗?
答案 0 :(得分:1)
Vue 将您的 JSON 视为 string
。
<template>
<div>
<a
class="js-go-to go-to position-fixed"
href="javascript:;"
style="visibility: hidden"
data-hs-go-to-options='{
"offsetTop": 700,
"position": {
"init": {
"right": 50
},
"show": {
"bottom": 15
},
"hide": {
"bottom": -15
}
}
}'
>
<i class="fas fa-angle-up"></i>
</a>
</div>
</template>
通过在指令前放置 :
将数据绑定到元素,因此您告诉 Nuxt 它应该是 object
,而不是 string
:
<template>
<div>
<a
class="js-go-to go-to position-fixed"
href="javascript:;"
style="visibility: hidden"
:data-hs-go-to-options='{
"offsetTop": 700,
"position": {
"init": {
"right": 50
},
"show": {
"bottom": 15
},
"hide": {
"bottom": -15
}
}
}'
>
<i class="fas fa-angle-up"></i>
</a>
</div>
</template>
如果你在 jQuery 中使用它,那么首先使用 JSON.stringify()
,所以一切都会根据需要进行转义:
<template>
<div>
<a
class="js-go-to go-to position-fixed"
href="javascript:;"
style="visibility: hidden"
:data-hs-go-to-options='JSON.stringify({
"offsetTop": 700,
"position": {
"init": {
"right": 50
},
"show": {
"bottom": 15
},
"hide": {
"bottom": -15
}
}
})'
>
<i class="fas fa-angle-up"></i>
</a>
</div>
</template>