首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与动态创建的组件进行父子通信

与动态创建的组件进行父子通信
EN

Stack Overflow用户
提问于 2017-02-20 16:03:34
回答 1查看 440关注 0票数 0

我正在尝试使用VUE和LARAVEL构建一个表单,其中用户可以动态地构建参与者组。我决定解决这个问题,让用户为每个组生成一个表。在每个表中,她/他可以添加和删除行。

到现在为止,我已经说到了这一点:

父HTML:

代码语言:javascript
复制
<div class="form-group col-md-12 blocco-partecipante" v-for="participant_block in participant_blocks">    
  <mimi-table :operators='operators' :participant_block='participant_block' @removeBlockParticipant="removeBlockParticipant" @makeBlockWinner="makeBlockWinner"></mimi-table>   
</div>

STYLE.JS

代码语言:javascript
复制
Vue.component('mimi-table', {

props: ['operators', 'participant_block'],

template: '\
    <div>\
      <div class="row">\
        <div class="col-xs-6"><button type="button" class="btn btn-default" @click.prevent="makeBlockWinner">Winner</button></div>\
        <div class="col-xs-6"><button type="button" class="btn btn-danger pull-right" @click.prevent="removeBlockParticipant">Remove Block</button></div>\
      </div>\
      <table class="table table-bordered" id="participants-table" v-model="participant_block">\
     <thead>\
        <tr>\
            <th>#</th>\
            <th>Operator</th>\
            <th>Head Operator</th>\
            <th></th>\
        </tr>\
    </thead>\
    <tbody>\
        <tr v-for="(row, index) in rows" track-by="index">\
            <th>{{ index + 1 }}</th>\
            <td>\
                <select style="width: 100%" v-model="row.selected">\
                    <option v-for="operator in operators" :selected="(row.selected == operator.name)">{{ operator.name}}</option>\
                </select>\
            </td>\
            <td>\
                <input type="checkbox" name="head" v-model="row.head_operator" @click="selectHeadOperator(index)"/>\
            </td>\
            <td>\
                <input type="button" class="ibtnDel btn btn-md btn-danger" @click="removeOperator(index)" value="Remove" />\
            </td>\
        </tr>\
    </tbody>\
    <tfoot>\
        <tr>\
            <td colspan="4" style="text-align: left;">\
                <input type="button" class="btn btn-lg btn-block" value="Add Operator to Participant Block" @click="addOperator"/>\
            </td>\
        <tr>\
        <tr>\
        </tr>\
    </tfoot>\
</table>\
</div>\
',

data: function () {
   return {
     rows : [

     ]
   }
}, 

methods: {
    addOperator: function() {
        this.rows.splice(this.rows.length, 0, {});
        if (this.rows.length == 1)
             this.rows[0].head_operator = true;
     },

    removeOperator: function(value) {
        this.rows.splice(value, 1);
    },

    selectHeadOperator: function(index) {
        this.rows.forEach(function(row, counter) {
            if (counter != index) row.head_operator = false;
        });
    },

    removeBlockParticipant: function() {
        this.$emit('removeBlockParticipant');
    },

    makeBlockWinner: function() {
        this.$emit('makeBlockWinner');
    }
 }
});

new Vue({
  el: '#main-form',

 data: {
     participant_blocks: [],
     operators: [],
     index: 0
},

 mounted: function() {
     vm = this;
    axios.get('/operators').then((response) => {
        vm.operators = response.data;
    });
 }, 

methods: {
    addBlockParticipant: function() {
        this.participant_blocks.splice(this.participant_blocks.length, 0, {});
},

removeBlockParticipant: function() {
    console.log('test 1');
},

makeBlockWinner: function() {
    console.log('test 2');
},
} });

1)组件中的$emit不会向父组件触发消息。removeBlockParticipant和makeBlockWinner它们不记录消息。我不明白为什么。是不是因为这些组件是动态创建的,所以我必须使用另一个系统?

2)我面临的另一个问题是,我想在动态创建的每个select输入上使用库select2.js。可以在我正在编写的系统中应用这个库吗?意思是,是否可以:

代码语言:javascript
复制
$('#component').select()

在创建这个select之前?类似于Jquery的".on()“?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-20 18:50:48

此时此刻,我发现错误在于与子组件发出的事件相关的属性不能使用camelCase语法。

因此:

代码语言:javascript
复制
  @removeBlockParticipant="removeBlockParticipant"

应该是:

代码语言:javascript
复制
  @remove-block-participant="removeBlockParticipant"

以防有人遇到同样的问题。

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

https://stackoverflow.com/questions/42339302

复制
相关文章

相似问题

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