美文网首页
微信小程序动态设置页面背景色

微信小程序动态设置页面背景色

作者: holidayPenguin | 来源:发表于2021-04-12 17:56 被阅读0次

    小程序不能通过js操作节点样式,只能给节点添加一个style="{{customStyle}}"达到效果

    但是要给整个页面添加背景色,就需要自定义一个根节点,相应的就要给这个节点添加行内样式

    由于每次添加根节点和对应样式比较麻烦,可以使用一个组件来完成

    如果每次都是手动去更新每一个组件的样式比较麻烦,就需要使用订阅发布者模式

    组件包含功能:

    • 传入自定义class、
    • 组件挂载节点时添加样式、
    • 手动刷新样式(父组件使用selectComponent查找组件并调用刷新方法)
    • 订阅样式变化通知
      这里在订阅通知的时候需要注意书写方式,否则会出现this丢失的情况,addUiConfigDep(this.setUiConfig.bind(this))
    • 取消订阅样式变化通知

    样式查询模块功能

    查询样式时如果样式发送变化,给所有订阅者发布通知。

    主要代码

    发布订阅者

    class dep {
      subs = new Set()
    
      addSub (sub) {
        if (!sub) return
    
        this.subs.add(sub)
      }
    
      deleteSub (sub) {
        // console.log('--deleteSub--', this.subs.has(sub))
        if (this.subs.has(sub)) {
          this.subs.delete(sub)
        }
      }
    
      notify () {
        wechat.nextTick().then(() => {
          // console.log('size=', this.subs.size)
          this.subs.forEach((sub) => {
            sub()
          })
        })
      }
    }
    

    创建全局实例

    
    const uiConfigDep = new dep()
    
    export const addUiConfigDep = (cb) => {
      uiConfigDep.addSub(cb)
    }
    
    export const deleteUiConfigDep = (cb) => {
      uiConfigDep.deleteSub(cb)
    }
    

    订阅(微信小程序组件)

      lifetimes: {
        attached () {
          this.constrator = this.setUiConfig.bind(this)
          addUiConfigDep(this.constrator)
        },
      },
    

    取消订阅(微信小程序组件)

      lifetimes: {
        detached () {
          deleteUiConfigDep(this.constrator)
        },
      },
    

    相关文章

      网友评论

          本文标题:微信小程序动态设置页面背景色

          本文链接:https://www.haomeiwen.com/subject/yngtlltx.html