javascript - 如何从标准 JS 访问 Vue 组件?

标签 javascript vue.js

如何通过 window.addEventListener 访问组件的数据? 我想按“g”键并隐藏 Vue 组件测试。

JS:

window.onload = function () {
  Vue.component('test', {
    template: `<div id="box" v-if="visible"></div>`,
    data() {
      return {
        visible: true
      }
    }
  })
  var app = new Vue({
    el: '#app'
  });
  window.addEventListener('keydown', (e) => {
    if (e.key == 'g') {
      //set test.visible = false
    }
  });
  window.app = app;
}

HTML:

<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script src="code.js"></script>
  <link rel="stylesheet" type="text/css" href="styles.css" />

</head>

<body>
  <div id="app">
    <test></test>
  </div>
</body>
</html>

最佳答案

created组件的life cycle hook中添加监听器。这将使您能够访问该实例,包括visible数据属性。

确保在组件被销毁后也删除监听器。

window.onload = function() {
  Vue.component('test', {
    template: `<div id="box" v-if="visible"></div>`,

    data() {
      return {
        visible: true
      }
    },

    created() {
      window.addEventListener('keydown', this.visibilityHandler)
    },

    destroyed() {
      window.removeEventListener('keydown', this.visibilityHandler)
    },

    methods: {
      visibilityHandler(e) {
        if (e.key == 'g') {
          this.visible = false
        }
      }
    },
  });

  var app = new Vue({
    el: '#app'
  });

  window.app = app;
}
#box {
  width: 100px;
  height: 100px;
  border: 1px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <test></test>
</div>

关于javascript - 如何从标准 JS 访问 Vue 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55925457/

相关文章:

css - 如何将后缀为 ‘.scss’的文件导入到Vue元素的子组件中?

javascript - 如何在我的 Vue 项目中设置 vue-burger-menu

javascript - 使用 $.Deferred 对象进行并行 ajax 请求

javascript - "Use the function form of "在使用 Gulp + Babel + JsHint 时使用 strict"

javascript - 单击时如何更改链接的颜色?

vue.js - VueJS 路由器防止返回某些路由器链接

javascript - redux 函数 'connect(mapStateToProps)(ConnectedList)' 的名称(类型)是什么

javascript - 缩小js时 bool 切换的原因

无法识别 Vue.js VSCode Vetur Emmet 和 Scaffold Snippets

javascript - Vuejs,将 Prop 传递给 data() 不起作用