🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

2786閲覧

Vue コンポーネントにuser_idを渡したいがundefinedになる

makiri2002

総合スコア13

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2019/09/11 12:29

前提・実現したいこと

Laravelで掲示板(DM機能)を作るために、
メッセージコンポーネントにuser_idとboard_idをpropsで渡し、コンポーネント内で入力されたメッセージと共にデータベースに登録したい。

発生している問題・エラーメッセージ

chromeのVueツールで確認したところ、
$attrsには値が入っているが、dataは「undefined」になってしまう。

▼data
bord_id:undefined
message:""
user_id:undefined

▼$attrs
bordid:1
userid:1

そのため、axios.getで取得しようとしているメッセージ一覧が500エラーになってしまう。

GET http://127.0.0.1:8000/bords/undefined/messages/ 500 (Internal Server Error)

web.php

Route::resource( 'bords.messages', 'MessagesController', ['only' => ['index', 'store']]); Route::post('/addMessage', 'MessagesController@store');

app.js

Vue.component('message-component', require("./components/ExampleComponent.vue").default); const chat = new Vue({ el: "#chat", data: function(){ return { userId: '', bordId: '', } } });

ExampleComponent.vue

<template> <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <form> <input type="hidden" class="form-control" id="user_id" name="user_id"> <input type="hidden" class="form-control" id="bord_id" name="bord_id"> <textarea id="message" class="form-control" type="textarea" name="message" v-model="message"></textarea> <button type="button" class="btn btn-primary" @click.privent="sendMessage()">送信</button> </form> </div> </div> </div> </template> <script> export default ({ name: 'message-component', proprs:[ 'userId', 'bordId', ], data: function(){ return { user_id : this.userId, bord_id : this.bordId, message: '', } }, methods: { getMessages() { axios.get('/bords/' + this.bord_id + '/messages/'); }, sendMessage() { const url = '/addMessage'; let params = new URLSearchParams(); params.append ('user_id', this.user_id), params.append ('bord_id', this.bord_id), params.append ('message', this.message), axios.post(url, params, { header: {'Content-Type': 'application/x-www-form-urlencoded'}}) .then(function(response){ message-component.getMessage() // 成功したらメッセージをクリア this.message = ''; console.log(this.params); }) .catch(error => console.log(error)); }, }, mounted() { this.getMessages(); } }); </script>

messages.blade.php

<div id="chat"> <message-component :user-id="{{ Auth::id() }}" :bord-id="{{ $bord->id }}"></message-component> </div>

試したこと

親コンポーネントのdataに入れ忘れていたからだと思いましたが、変わりませんでした。

補足情報(FW/ツールのバージョンなど)

Laravel 5.5

解決のヒントをいただけないでしょうか?
何卒、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

:user-id="{{ Auth::id() }}"
v-bind-user-id="{{ Auth::id() }}"と同じ意味です。
Auth::id()が仮に1なら

dataに含まれる1というプロパティの値ををバインドするという意味になります
dataにはuser_id、bord_idしかないため、undefinedになります。

具体的な対応方法ですがdataに値を入れて
:user-id="user_id" として参照させるか

user-id="{{ Auth::id() }}"
としてください

投稿2019/09/12 01:17

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makiri2002

2019/09/16 04:01

ご回答ありがとうございました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問