首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VueJs -调用传递给动态创建的DOM元素的方法

VueJs -调用传递给动态创建的DOM元素的方法
EN

Stack Overflow用户
提问于 2019-04-30 18:40:34
回答 2查看 1.1K关注 0票数 1

在我的Vuejs组件中,我动态填充了一个datatable

例如,在我的methods

代码语言:javascript
复制
displayUserTypes(){
   axios.get('/antenna-monitor/pull-user-types').then( ({data}) => 
   {
      for(var i in data)
      {
          $('#user-roles').dataTable().fnAddData( [
              data[i].name,
              data[i].description,
              '<a href="#" title="Edit" @click.prevent="editModal"><i class="fa fa-edit"></i></a> | <a href="#" title="Delete"><i class="fa fa-trash"></i></a>'
           ]);
      }

},
created() {
        this.displayUserTypes();         
}

这是组件的HTML部分:

代码语言:javascript
复制
<button class="btn btn-success" @click="addModal"><i class="fa fa-plus"></i>Add New</button>                     
<table id="user-roles" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
       <thead>
            <tr>
                <th>Name</th>
                <th>Description</th>
                <th>Action</th>
            </tr>
       </thead>
 </table>

请注意,在我的displayUserTypes函数中,当填充datatable时,我附加了一个Edit锚标记,并在其中传递了方法editModal。单击此编辑链接应该会触发一个模式,如下所示:

在我的方法中:

代码语言:javascript
复制
addModal(){
       $('#userRolesModal').modal('show');
},

editModal(){
       $('#userRolesModal').modal('show');                
},

但是该模式不是从editModal函数触发的。我已经确认该模式工作正常,因为我的添加按钮触发了该模式,该按钮调用addModal函数。所以我的想法是,由于我从动态创建的链接调用editModal函数,所以可能需要将一些额外的东西传递给我的代码来触发这个方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 20:02:50

你使用datatables动态追加html,vue不会监听动态的DOM操作。因此,您定义的方法不适用于新插入的HTML。

实现所需功能的一种方法是使用editModal方法创建一个新的Vue实例,并在渲染完成后将其挂载到表上。

代码语言:javascript
复制
displayUserTypes() {
  axios.get('/antenna-monitor/pull-user-types').then(({ data }) => {
    for (var i in data) {
      $('#user-roles').dataTable().fnAddData([
        data[i].name,
        data[i].description,
        '<a href="#" title="Edit" @click.prevent="editModal"><i class="fa fa-edit"></i></a> | <a href="#" title="Delete"><i class="fa fa-trash"></i></a>'
      ]);
    }

    new Vue({
     methods: {
        editModal() {
          $('#userRolesModal').modal('show');
        }
     }
    }).$mount('#user-roles')
  });
}

如果您希望在不每次都创建新vue实例的情况下实现这一点,请参考下面关于如何重新挂载vue组件的内容

How to re-mount a component?

Force updating vue component

票数 2
EN

Stack Overflow用户

发布于 2020-07-23 23:29:27

VueJS对象指定一个名称:

代码语言:javascript
复制
var MyObj = new Vue({
    ...
    methods: {
        call_me() {
            alert('Here I am!');
        },
    }
});

在您的dynamic HTML中,您可以生成以下内容:

代码语言:javascript
复制
...
var link = "<a href='#' onclick='JavaScript:MyObj.call_me()'>Click me!</a>";
...

我不知道这是不是一个好的解决方案,但它是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55919206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档