【问题标题】:Accessing Vue Component scope from external javascript从外部 javascript 访问 Vue 组件范围
【发布时间】:2018-11-09 17:41:37
【问题描述】:

我可以从外部 javascript 访问 Vue 组件的数据属性和方法吗?我正在尝试创建一个混合应用程序,其中屏幕的一部分是 Vue 组件,我想在单击由纯 js 处理的按钮时调用该组件内的方法。有没有办法做到这一点?

谢谢!

【问题讨论】:

    标签: vue.js vuejs2 vue-component


    【解决方案1】:

    是的,你可以在 Vue 组件中添加一个事件监听器来监听按钮点击的事件。参见示例here on codepen

    JS

    new Vue({
      el: '#app',
        methods: {
            clickMethod(event){
                if (event.target.id === 'outsideButton') {
                    alert('button clicked')
                }
            }
        },
        created(){
            let localThis = this 
            document.addEventListener('click', this.clickMethod)
        }
    })
    

    HTML

    <div>
        <button id="outsideButton">Button</button>
        <div id="app">
        </div>
    </div>
    

    【讨论】:

      【解决方案2】:

      是的。您需要将您的 Vue 对象分配给一个变量(即vue),然后您可以访问vue.methodName()vue.propertyName

      // add you new Vue object to a variable
      const vue = new Vue({
        el: "#app",
        data: {
          todos: [
            { text: "Learn JavaScript", done: false },
            { text: "Learn Vue", done: false },
            { text: "Play around in JSFiddle", done: true },
            { text: "Build something awesome", done: true }
          ]
        },
        methods: {
        	toggle: function(todo){
          	todo.done = !todo.done
          }
        }
      });
      
      // Add event listener to outside button
      const button = document.getElementById('outsideButton');
      button.addEventListener('click', function() {
      	vue.toggle(vue.todos[1]);
      });
      body {
        background: #20262E;
        padding: 20px;
        font-family: Helvetica;
      }
      
      #app {
        background: #fff;
        border-radius: 4px;
        padding: 20px;
        transition: all 0.2s;
      }
      
      li {
        margin: 8px 0;
      }
      
      h2 {
        font-weight: bold;
        margin-bottom: 15px;
      }
      
      del {
        color: rgba(0, 0, 0, 0.3);
      }
      <script src="https://unpkg.com/vue@2.5.16/dist/vue.min.js"></script>
      <div id="app">
        <h2>Todos:</h2>
        <ol>
          <li v-for="todo in todos">
            <label>
              <input type="checkbox"
                v-on:change="toggle(todo)"
                v-bind:checked="todo.done">
      
              <del v-if="todo.done">
                {{ todo.text }}
              </del>
              <span v-else>
                {{ todo.text }}
              </span>
            </label>
          </li>
        </ol>
      </div>
      <div class="outside">
        <button id="outsideButton">
          Click outside button
        </button>
      </div>

      【讨论】:

        猜你喜欢
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 2017-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多