Vue2 绑定内联样式 Background 的一些坑

发布于 2022-10-26 12:38:01 字数 1498 浏览 158 评论 0

此时我有一个需求,给一个盒子添加一个背景图片,这个背景图片是动态请求回来的,那么应该怎么做?看似简单,其实很考研对 JavaScript 基础的功底以及对vue生命周期的理解。正常情况下的 vue 内联样式如下写法:

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
data: {
  activeColor: 'red',
  fontSize: 30
}

此时的 style 绑定的是一个 JavaScript 对象,在 JavaScript 中不允许出现 - ,那么绑定一个背景图片应该这么写:

<div :style="{background: 'url('+ img +')',backgroundSize:cover }"></div>
data:{
  img:'xxx.png'
}

好了背景图片已经成功通过字符串拼接的方式加上了,我们改为动态请求回来的。

<div :style="{background: 'url('+ img +')',backgroundSize:cover }"></div>
data:{
    img:'xxx.png'
},
methods:{
// 伪代码 请求数据
      getImg(){
        this.$http.get().then(function (e) {
          this.img = e.data //将数据赋值给img
        }.bind(this))
      }
},
created(){
// 调用函数
    this.getImg()
} 

created vue2 生命周期钩子函数

在实例创建之后同步调用。此时实例已经结束解析选项,这意味着已建立:数据绑定 data,计算属性 computed,方法 methods、watcher、事件回调。
此时你会发现虽然渲染了出来,但是报错了

Error in render function
Cannot read property 'img' of undefined

因为在生命周期 mounted 之前都是虚拟 dom 也就是说,当页面已经渲染完,但是 vue 还没执行,所有数据丢失,此时我们加上

<div v-if='img ' :style="{background: 'url('+ img +')',backgroundSize:cover }"></div>

表示有 img 属性的时候我们选择这个元素,至此就成功绑定背景图片了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

天赋异禀

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文