Как динамически отображать входное значение в пользовательском компоненте после нажатия кнопки в Vue?

#javascript #vue.js

Вопрос:

Я хочу отобразить данные элемента ввода «пользовательской формы» в дочернем компоненте «строка состояния» после нажатия кнопки «Отправить», но при нажатии кнопки просто ничего не происходит. Есть идеи, почему? Пожалуйста, смотрите ссылку ниже.

https://jsfiddle.net/L15fupya/

 productForm.component('status-bar', {
    props: ['outputData'],
    template: '<p v-html="outputData"></p>',
    data(){
        return {
            outputData: ''
        }
    },
    methods: {
        doSomething (data) {
            this.outputData = data
            console.log(this.outputData)
        }
    }
})
 

Ответ №1:

Также проверьте приведенные ниже изменения для обоих template js . Вы сможете понять поток, когда сравните приведенное ниже с вашим JSFiddle кодом

HTML

 <script src="https://unpkg.com/vue@next"></script>
    <div id="product_form">
        <h1>Product Add</h1>
        <div class="lines">
            <custom-form></custom-form>
           // Change added (Moved send button inside custom-form component
        </div>
    </div>
 

и js код

       var productForm = Vue.createApp ({})
        
        productForm.component('custom-form', {  
            components: ['status-bar'],
            template: `
                <label>Name<input type="text" v-model="this.product.name" @change="doSomething(this.product.name)"></label> <button v-on:click="submitProduct">Send</button><button v-on:click="closeStatus">Hide</button>
                <status-bar v-show="statusVisible" :outputData="outputData">{{outputData}}</status-bar>
                ` , // Change added
            
            data: function() {
                return {
                    product: {
                        name: 'asdf'
                    },
                    outputData: '<div>Sample</div>', // Change added
                    statusVisible: false // Change added
                }
            },

           // Methods section added
           methods: {
            submitProduct() {
              this.statusVisible = true;
            },
            closeStatus() {
              this.statusVisible = false;
            }
           }
        })
        
        productForm.component('status-bar', {
            props: ['outputData'],
            template: '<p v-html="outputData"></p>',
            data(){
                return {
                    outData: '' // Change added
                }
            },
            methods: {
                doSomething (data) {
                    this.outData = data
                    console.log(this.outputData)
                }
            }
        })
        
        const vm = productForm.mount('#product_form')
 

Комментарии:

1. Спасибо!! Это работает для меня 🙂

2. @v01d Отлично! Если это работает для вас, и вы довольны — тогда, в общем, вы бы проголосовали за ответ. Это не только поможет другим людям с той же проблемой, но также будет означать, что люди с большей вероятностью помогут вам в будущем с любыми другими возникающими у вас проблемами.

3. Основываясь на ваших инструкциях, я перестроил свой код, и теперь данные передаются безупречно :))

4. Хороший человек … рад, что я могу помочь