如何将数据从 vue 组件传递到 laravel 中的视图(HTML)

Posted

技术标签:

【中文标题】如何将数据从 vue 组件传递到 laravel 中的视图(HTML)【英文标题】:How to pass data from vue component to view(HTML) in laravel 【发布时间】:2020-06-16 12:38:19 【问题描述】:

我正在尝试将数据从 vue 组件传递到刀片文件。我尝试创建道具,但它对我不起作用。是否可以将对象传递给道具以获取数据?我是新拉拉维尔。 我想将主题、消息、日期、条件和模块名称的数据传递给刀片文件(视图)。 我一直在寻找这个,但找不到一个能说明这一点的答案。

谢谢!

blade.php

  <div id="app">
       <email-component
          email_edit_route=" route('havence.automail.edit',['id'=>$mailTemplates->id]) "
       >
       </email-component>

 </div>

Vue.js

<script>
    import Vue from 'vue'
    import axios from 'axios'
    import MarkdownIt from 'markdown-it'
    import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
    var msg_editor;


    const md = new MarkdownIt(
        linkify: true
    )

  export default 
    props: ['email_creation_link', 'email_index_route', 'email_edit_route','conditions','modules'],

    components: 

    ,


    data() 
        return 
            template: 
                subject: '',
                message: '' ,
                days: '',
                condition_id: 1,

            ,
            options:[
                
                    display:'Client Name',
                    actual:'Client name'
                , 
                
                    display:'Joined Date',
                    actual:'Joined date'
                ,
                
                    display:'Module Name',
                    actual:'Module name'
                ,
                
                    display:'Last Seen',
                    actual:'Last seen'
                ,
            ],


              showName: false,


        
    ,


    mounted()
             var self = this;

            ClassicEditor
            .create(document.querySelector( "#msg"),
                
                )
            .then(editor => 
                msg_editor = editor;
                editor.model.document.on( 'change:data', () => 
                    self.template.message = msg_editor.getData();
                );
            )

            .catch(error => 
                console.error(error);
            )

        , 

    methods: 

        //Drag items
        dragstart: function(item, e)
            this.draggingItem = item;
            e.dataTransfer.setData('text/plain', item.actual);
        ,
        dragend: function(item,e) 
            e.target.style.opacity = 1;
        ,
        dragenter: function(item, e) 
            this.draggingItem = item;
        ,
        //content
        replaceVariables(input)
        
            let updated = input
            return updated
        ,
        //hidecontent
        showHide: function(e)
        
            console.log("Show "+e.target.value+ " fields")
            this.showName = e.target.value !== ''
        ,
        fetch()
        
            //request data
            axios.get(this.email_index_route,this.template)
                .then((res) => 
                    this.template = res.data.template;

                )
        ,
        save()
        
            //save data to db
            axios.post(this.email_index_route, this.templates)
                .then((res) => 
                    alert('Mail sent successfull!')
                )
        ,
        addToMail: function(type, text)
        
            if (type == 'message') 
                this.template.message += text;
                msg_editor.setData(this.template.message);
            
        ,

        //user name replace
        replaceVariables() 
            return this.replaceVariables(this.options || '')
        ,
    
  
</script>

【问题讨论】:

【参考方案1】:

快速解决方案。 :为什么不将数据存储在本地存储中并从 laravel Blade 中获取? 下一个解决方案:您可以从 vue 触发全局事件并在 laravel Blade 上收听。

【讨论】:

我将如何在本地存储中存储数据并从 laravel Blade 中获取数据。你有什么例子吗?我是新拉拉维尔。 @拉维 @NavanithaMoorthy 您想在数据保存到 DB r/从您的发布请求返回成功响应后将数据传递给刀片吗? 是的,一旦数据保存到数据库,我想将数据传递给刀片。我将如何做到这一点我找不到任何方法 @NavanithaMoorthy 抱歉回复晚了。你可以使用 laravel 广播来触发和监听事件。 laravel Broadcasting。即你从 Laravel 控制器触发和事件,你可以在 vue 组件中监听该事件。【参考方案2】:

为什么不通过 ajax post call 发送数据并从控制器获取数据? 然后将数据对象传递给刀片模板。

【讨论】:

但是在VUE js中可以使用ajax方法吗?

以上是关于如何将数据从 vue 组件传递到 laravel 中的视图(HTML)的主要内容,如果未能解决你的问题,请参考以下文章

如何将分页数据和数组从控制器 laravel 传递到 vue 组件?

如何将数据从 laravel 传递到 Vue Router?

将数据从 Laravel 传递到 Vue 组件的最佳实践

无法将数据从刀片传递到 vue(Laravel 5.3)

如何将 Laravel 数据(json)传递给 Vue 组件

Vue.js - 如何将 prop 作为 json 数组传递并在子组件中正确使用?