Laravel 和 VueJS:在 Blade 中调用 VueJS 方法

Posted

技术标签:

【中文标题】Laravel 和 VueJS:在 Blade 中调用 VueJS 方法【英文标题】:Laravel & VueJS: Call VueJS Method Inside Blade 【发布时间】:2018-10-13 11:09:04 【问题描述】:

我一直在寻找解决问题的方法和参考资料。我很困惑通过外部按钮调用 VueJs 组件内部的 vue 方法(例如:createItem() ...)。

这是我的“app.js”

// ..\resources\assets\js\app.js
require('./bootstrap');

window.Vue = require('vue');
window.Vue.prototype.$http = axios;

Vue.component('sample', require('./components/SampleComponent.vue'));

const app = new Vue(
    el: '#app',
    methods: 
        createItem: function() 
            // what's here?
        
    
);

SampleComponent.vue

<template>
...
</template>

<script>
    export default 
        mounted() 
            this.getItems();
        ,
        data() 
            return 
                items: [],
                newItem: 'name': '', 'description': '',
                fillItem: 'id': '', 'name': '', 'description': ''
            
        ,
        methods: 
            getItems() 
                axios.get( 'api/data' ).then( response => 
                    let answer = response.data;
                    this.items = answer;
                )
            ,
            clearItem()
                this.newItem = 'name': '', 'description': '';
                this.fillItem = 'id': '', 'name': '', 'description': '';
            ,
            createItem()
                var self = this;
                $("#create-role").on("hidden.bs.modal", function () 
                    self.clearItem();
                ).modal('show');
            ,
        
    
</script>

index.blade.php

<div id="app>
...

<!-- Load samplecomponent to blade -->
<sample></sample>

<!-- An external button to call method inside SampleComponent.vue, How can I do this? -->
<button type="button" class="btn btn-sm" @click="createItem" id="external-button">Create new item</a>

</div> <!-- End App -->

我已阅读指南,但仍然失败。对不起这个新手问题,我刚刚使用了 VueJS。谢谢大家的帮助。

【问题讨论】:

这是一个方法调用而不是一个变量,因此:@click="createItem()" 谢谢@ka_lin,我想通过外部按钮(外部组件)调用 createItem()。 第一:按钮前的div没有关闭,第二:为什么?从技术上讲,您可以通过全局 app 访问并在点击事件上创建一个常规 JS,您可以使用 app 变量 如果是这样,它会显示为:[Vue 警告]:属性或方法“createItem”未在实例上定义,但在渲染期间被引用。作为参考问题,我将代码缩写,已解决问题。 检查this和a clean way to comunicate between components 【参考方案1】:

您的标记已损坏,因为&lt;button&gt;&lt;/a&gt; 而不是&lt;/button&gt; 关闭

<button ... @click="createItem" id="external-button">Create...</a>

另外,createItem 是一个函数,所以一定要加上括号!

更正的代码:

<button type="button" class="btn btn-sm" @click="createItem()" id="external-button">Create new item</button>

【讨论】:

【参考方案2】:

您可以使用ref 来调用孩子的方法:

标记:

<div id="app>
  <sample ref="child"></sample>
  <button type="button" class="btn btn-sm" @click="callChildCreateItem" id="external-button">Create new item</a>
</div>

家长:

const app = new Vue(
    el: '#app',
    methods: 
        callChildCreateItem: function() 
            this.$refs.child.createItem()
        
    
);

或者,您可以使用事件(也许是一个插件like 这会让事情变得更容易)

家长:

const app = new Vue(
    el: '#app',
    methods: 
        callChildCreateItem: function() 
             this.$events.fire('childCreateItem')
        
    
);

孩子:

  export default 
        ...
        methods: 
           ...
            createItem()
                ...
            ,
        ,
        events: 
          childCreateItem () 
            this.createItem()
          
        ,
    

通过:https://***.com/a/47565763/965452

【讨论】:

以上是关于Laravel 和 VueJS:在 Blade 中调用 VueJS 方法的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel Blade 中转义 VueJS 数据绑定语法?

我如何在 laravel Blade 中使用 vuejs 组件?

如何在 vuejs 指令中使用 Laravel Blade 语法?

Vuejs 动态切换类在 Laravel Blade 模板中不起作用

Laravel 和 VueJS,访问 Vue 实例。

Blade 中的 VueJS 模板未更新