属性或方法未在实例上定义,但在呈现期间引用

时间:2017-01-31 11:14:29

标签: laravel-spark

我正在研究laravel + spark + vuejs。我正在尝试创建新模块,以下是代码。

路由/ web.php

Route::get('/emergency-template-plan', 'EmergencyPlanTemplateController@emergencyTemplatePlan');

Vue js: resources / assets / js / app.js

require('spark-bootstrap');
require('./components/bootstrap');

Vue.component('spark-emergency', { 
data() {
    return {
        all_emergencies:[]
    };
},
created() {
    this.getEmergencies();
},
methods: {
    getEmergencies() {
        this.$http.get('/emergency-template-plan')
            .then(response => {
                this.all_emergencies = response.data;
            });
    }
}
});

var app = new Vue({
 mixins: [require('spark')]
});

控制器: app / Http / Controllers / EmergencyPlanTemplateController.php

public function emergencyTemplatePlan(){
  $data = EmergencyPlanTemplate::all();

   return view('spark::emergency-template-plan', ['emergencies'=>$data]);
}

查看:resources / views / vendor / spark / emergency-template-plan.blade.php

@extends('spark::layouts.app')
@section('content')
<spark-emergency :all_emergencies="all_emergencies" inline-template>    
<tr v-for="emergency in all_emergencies">
    <td>
        <div class="btn-table-align">
            @{{ emergency.type }}
        </div>
    </td>
</tr>
</spark-emergency>
@endsection

我收到以下错误

Vue警告]:属性或方法“all_emergencies”未在实例上定义,但在呈现期间引用。确保在数据选项(在根实例中找到)中声明反应数据属性

1 个答案:

答案 0 :(得分:1)

此处的问题是您尝试使用all_emergencies组件的父组件中的spark_emergency

您尝试通过道具:all_emergencies="all_emergencies"发送紧急情况,这基本上意味着您希望从组件的父级发送一些数据到子组件。

由于您在this.$http...挂钩内初始化组件本身created内的紧急情况,因此无需将其作为道具发送。这应该使它工作。

<spark-emergency inline-template>    
<tr v-for="emergency in all_emergencies">
<td>
    <div class="btn-table-align">
        @{{ emergency.type }}
    </div>
</td>
</tr>
</spark-emergency>

进一步阅读https://vuejs.org/v2/guide/components.html#Props