我正在尝试动态创建一些html内容,并将vue组件方法绑定到元素上的事件。但是这不起作用。下面是对该问题的描述和带有测试用例的代码片段。
重现问题的步骤
单击“单击我1”
观察控制台。
单击“切换弹出窗口”获取工具提示。
单击“单击我2”
观察控制台。
预期行为
在步骤2中,您应该在控制台中看到“您应该在控制台中看到这个”。在步骤5中,您应该再次看到“您应该在控制台中看到这个”。
实际行为
在步骤2中,“您应该在控制台中看到这个”出现在控制台中。在步骤5中,“您应该在控制台中看到这个”不会出现在控制台中。

new Vue({
  el: '#app',

  methods: {
    expectToSucceed() {
      console.log('you should see this in the console');
    },
  },

  created() {
    $(document).ready(() => {
      const mockedDynamicHtml = `
        <div class="popover">
          <h1>Example tooltip</h1>
          <button @click="expectToSucceed" class="remove">Click me 2</button>
        </div>
      `;

      $('[data-toggle="popover"]').popover({
        html: true,
        template: mockedDynamicHtml,
      });
    });
  },
});

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <title></title>
  </head>
  <body>

    <div id="app">
      <a href="#" data-toggle="popover" title="Popover Header" data-content="Some content inside the popover">Toggle popover for tooltip</a>
      <br><br>
      <p><span @click="expectToSucceed">Click me 1</span></p>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
  </body>
</html>

最佳答案

它将是@click,如下所示:

<i @click="test"></i>

因为v-on的简写是@而不是:

09-25 19:50