Vue进阶(幺捌零):JS 向 Vue 传值

一、前言

项目开发过程中,组件通过render()函数渲染生成,并在组件内部定义了自定义拖拽指令。自定义拖拽指令实现了用户可以进行元素拖拽、缩放等一系列逻辑处理的动作。

另一个逻辑处理页面由Vue实现,该页面可以实时展示元素相关属性信息(包括size、width、heightlefttop等属性)。

二、思路

  1. 监听器方式实现;
  2. Vuex state实现;

三、代码实现

.js

// 鼠标按下事件
el.onmousedown = function (e) {
...
document.onmouseup = function (e) {
document.body.style.cursor = 'pointer';
document.onmousemove = null;
document.onmouseup = null;
isMove = false;
document.body.removeChild(mask);
// 元素样式relative下方位属性
let domStyle = {
width: data.width,
height: data.height,
left: data.left,
top: data.top
}
el.style.cssText = setStyle(el, domStyle)
// Vuex state实现方式
store.commit('domAzimuth/SET_DOMAZIMUTION', el.style.cssText);
// 监听器实现方式
// window.postMessage({domStyle: domStyle}, '*')
}
}
// 鼠标按下事件
el.onmousedown = function (e) {
  ...
  document.onmouseup = function (e) {
    document.body.style.cursor = 'pointer';
    document.onmousemove = null;
    document.onmouseup = null;
    isMove = false;
    document.body.removeChild(mask);
    // 元素样式relative下方位属性
    let domStyle = {
      width: data.width,
      height: data.height,
      left: data.left,
      top: data.top
    }
    el.style.cssText = setStyle(el, domStyle)
    // Vuex state实现方式
    store.commit('domAzimuth/SET_DOMAZIMUTION', el.style.cssText);
    // 监听器实现方式
    // window.postMessage({domStyle: domStyle}, '*')
}

}
// 鼠标按下事件 el.onmousedown = function (e) { ... document.onmouseup = function (e) { document.body.style.cursor = 'pointer'; document.onmousemove = null; document.onmouseup = null; isMove = false; document.body.removeChild(mask); // 元素样式relative下方位属性 let domStyle = { width: data.width, height: data.height, left: data.left, top: data.top } el.style.cssText = setStyle(el, domStyle) // Vuex state实现方式 store.commit('domAzimuth/SET_DOMAZIMUTION', el.style.cssText); // 监听器实现方式 // window.postMessage({domStyle: domStyle}, '*') } }

.vue

computed: {
...mapGetters('dragModule', ['editLayer']),
...mapGetters('domAzimuth', ['directProps']),
domStyle () {
return this.directProps
}
},
// 监听器方式中,务必在页面销毁前释放掉监听器,否则会造成内存泄漏!
beforeDestroy () {
// window.removeEventListener('message', this.listenerMessage)
},
mounted () {
// window.addEventListener('message', this.listenerMessage)
},
watch: {
domStyle (n) {
let configs = []
let model = {}
for (let name in this.editSoul.model) {
let config = this.editSoul.model[name]
model[name] = ''
config.name = name
if ('style' === name) {
config.value = this.directProps
}
configs.push(config)
}
this.model = model
this.configs = configs
},
}
    computed: {
      ...mapGetters('dragModule', ['editLayer']),
      ...mapGetters('domAzimuth', ['directProps']),
      domStyle () {
        return this.directProps
      }
    },
    // 监听器方式中,务必在页面销毁前释放掉监听器,否则会造成内存泄漏!
    beforeDestroy () {
//      window.removeEventListener('message', this.listenerMessage)
    },
    mounted () {
//      window.addEventListener('message', this.listenerMessage)
    },
    watch: {
      domStyle (n) {
        let configs = []
        let model = {}
        for (let name in this.editSoul.model) {
          let config = this.editSoul.model[name]
          model[name] = ''
          config.name = name
           if ('style' === name) {
              config.value = this.directProps
            }
          configs.push(config)
        }
        this.model = model
        this.configs = configs
      },
}
computed: { ...mapGetters('dragModule', ['editLayer']), ...mapGetters('domAzimuth', ['directProps']), domStyle () { return this.directProps } }, // 监听器方式中,务必在页面销毁前释放掉监听器,否则会造成内存泄漏! beforeDestroy () { // window.removeEventListener('message', this.listenerMessage) }, mounted () { // window.addEventListener('message', this.listenerMessage) }, watch: { domStyle (n) { let configs = [] let model = {} for (let name in this.editSoul.model) { let config = this.editSoul.model[name] model[name] = '' config.name = name if ('style' === name) { config.value = this.directProps } configs.push(config) } this.model = model this.configs = configs }, }

四、效果

在这里插入图片描述

五、拓展阅读

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYXDvQql' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片