質問編集履歴

3

追記①を追加しました。

2022/07/26 13:49

投稿

mikeko0901
mikeko0901

スコア227

test CHANGED
File without changes
test CHANGED
@@ -224,4 +224,87 @@
224
224
  アドバイスいただけますと幸いです。
225
225
  よろしくお願いいたします。
226
226
 
227
-
227
+ -----------------------
228
+ 【追記①】
229
+ コンポーネントを呼び出すblade側(create.blade.php)を、以前実装してVueコンポーネントを呼び出すのに成功したbladeとコピーして作成しましたら、v-bindもボタンクリック時のイベントも実行されました!
230
+
231
+ 実行されたcreate.blade.php
232
+ ```
233
+ <!DOCTYPE html>
234
+ <html lang="ja">
235
+
236
+ <head>
237
+ <meta charset="utf-8">
238
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
239
+ <!--form用トークンをセット-->
240
+ <meta name="csrf-token" content="{{ csrf_token() }}">
241
+
242
+ <title>{{ config('app.name', 'Laravel') }}</title>
243
+
244
+ <!-- Tell the browser to be responsive to screen width -->
245
+ <meta name="viewport" content="width=device-width, initial-scale=1">
246
+ <!--追記-->
247
+ <link href="https://fonts.googleapis.com/css?family=Lato:400,700|Noto+Sans+JP:400,700" rel="stylesheet">
248
+ </head>
249
+
250
+ <body class="hold-transition sidebar-mini layout-fixed accent-info">
251
+ <div class="wrapper">
252
+ <!-- Content Wrapper. Contains page content -->
253
+ <div id="app">
254
+ <div class="content-wrapper">
255
+ <!-- Content Header (Page header) -->
256
+ <div class="content-header">
257
+ <div class="container-fluid">
258
+ <div class="row mb-2">
259
+ <div class="col-sm-6">
260
+ <h1 class="m-0 text-dark">商品編集2</h1>
261
+ </div>
262
+ <div class="col-sm-6">
263
+ <ol class="breadcrumb float-sm-right">
264
+ <li class="breadcrumb-item active">Product</li>
265
+ </ol>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ </div>
270
+ <!-- /.content-header -->
271
+ <!-- Main content -->
272
+ <section class="content">
273
+ <div class="container-fluid">
274
+ <div class="row">
275
+ <div class="col-12">
276
+ <owner-form></owner-form>
277
+ </div>
278
+ </div>
279
+ </div><!-- /.container-fluid -->
280
+ </section>
281
+ <!-- /.main content -->
282
+ </div>
283
+ </div>
284
+ <!-- /.content-wrapper -->
285
+ <footer class="main-footer text-sm">
286
+ フッター
287
+ All rights reserved.
288
+ </footer>
289
+ </div>
290
+ <!-- ./wrapper -->
291
+
292
+
293
+ <!--追記-->
294
+ <script defer src="https://use.fontawesome.com/releases/v5.2.0/js/all.js"></script>
295
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
296
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
297
+
298
+ <!--vueで追記-->
299
+ <script src="{{ mix('js/app.js') }}"></script>
300
+ </body>
301
+
302
+ </html>
303
+
304
+ ```
305
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-26/7cdbc5a8-b554-4d19-8c0f-b036e36645d5.png)
306
+ v-bindされております・・・
307
+
308
+ なぜなのか、お分かりになりましたらアドバイスお願いします。
309
+ (私も現在調査中です…)
310
+

2

最初、エラーが出るとしていたのですが、エラーは試行錯誤の末なくなりました。(bladeに余計な変数があるためのエラーでした)

2022/07/26 11:50

投稿

mikeko0901
mikeko0901

スコア227

test CHANGED
@@ -1 +1 @@
1
- Laravel8 BreezeでVue.js2を使用したいがエラー出てしまう
1
+ Laravel8 BreezeでVue.js2を使用したいがv-bindやmethod効かない
test CHANGED
@@ -1,10 +1,13 @@
1
1
  Laravel Framework 8.83.19
2
2
  認証機能はLaravel Breezeを使用して実装しました。
3
3
 
4
+ 以下、実装まで行ったことです。
5
+ ①Laravel Breezeで認証まわりを実装しました。
6
+
4
- Laravel mixを使用したかったので、
7
+ Laravel mixを使用したかったので、
5
8
  [こちらのサイト](https://biz.addisteria.com/remove_vite/)を参考に、ViteからLaravel mixにしました。
6
9
 
7
- 認証まわり実装後、フロント部分にVue.jsを使いたくなり、[こちらのサイト](https://jun-app.com/series/vue_laravel_app/1#%E6%AC%A1%E5%9B%9E%E3%81%AF)を参考にしながら、
10
+ 認証まわり実装後、フロント部分にVue.jsを使いたくなり、[こちらのサイト](https://jun-app.com/series/vue_laravel_app/1#%E6%AC%A1%E5%9B%9E%E3%81%AF)を参考にしながら、
8
11
  Vue.jsをインストールしました。
9
12
 
10
13
  ●Vue・Vuex・Vue-Routerをインストール
@@ -13,62 +16,31 @@
13
16
  npm install vuex@3 vue-router@3
14
17
  ```
15
18
 
16
- その後、npm run dev時にエラーが出たので、[こちらのサイト](https://qiita.com/kenbarakanji/items/c5eb5e5c7691b7aaa655)を参考に以下の修正をしました。
17
- ●webpack.mix.jsに.vue()を追加
18
- ```
19
- //変更後
20
- mix.js('resources/js/app.js', 'public/js').vue()
21
- .postCss('resources/css/app.css', 'public/css', [
22
- require('postcss-import'),
23
- require('tailwindcss'),
24
- require('autoprefixer'),
25
- ]);
26
- ```
27
- これで```npm run dev```は問題なくできました。
28
-
29
- コンポーネントをテストしたく、以下のようなサンプルページを作成しました。
30
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-26/1c77fd5e-0b77-433f-854c-33e4ad4c3e8e.png)
31
-
32
-
33
- しかし、以下のようなエラーが出てしまい、ボタンをクリックしてもメソッドが実行されません。
34
- ```
35
- [Vue warn]: Property or method "open" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.
36
-
37
- Uncaught RangeError: Maximum call stack size exceeded
38
- ```
39
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-26/41b4c6c6-92d7-48fb-ad6a-041ef77318d7.png)
40
- moutedのconsole.logは実行されているようです。
41
-
42
- blade側(create.blade.php)
43
- ```
44
- <x-app-layout>
45
- <div class="py-12" x-data="app">
46
- <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
47
- <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
48
- <div class="p-6 bg-white border-b border-gray-200">
49
- <section class="text-gray-600 body-font relative">
50
- <div class="container px-5 mx-auto">
51
- <div class="flex flex-col text-center w-full mb-12">
52
- <h1 class="sm:text-3xl text-2xl font-medium title-font mb-4 text-gray-900">
53
- オーナー登録</h1>
54
- </div>
55
- <div>
56
- <owner-form></owner-form>
57
- </div>
58
- </div>
59
- </section>
60
- </div>
61
- </div>
62
- </div>
63
- </div>
64
- </x-app-layout>
65
- ```
66
-
67
- vue.jsコンポーネント
19
+ その後、npm run dev時にエラーが出たので、[こちらのサイト](https://qiita.com/kenbarakanji/items/c5eb5e5c7691b7aaa655)を参考にwebpack.mix.jsの修正をしました。
20
+
21
+ ⑤コンポーネントをテストしたく、以下のようなサンプルページを作成しました。
22
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-07-26/a5b33961-3ab3-493a-b451-5201c1da3b65.png)
23
+
24
+ ### 現状
25
+ しかし、inputエリアに入力した値をinputエリアの下に表示するようにしているのですが表示されません。
26
+ また、ボタンをクリック時の関数が実行されません…
27
+
28
+ ### コード
29
+ vue.jsコンポーネント OwnerForm.vue
68
30
  ```
69
31
  <template>
70
32
  <div>
71
33
  コンポーネントだよ
34
+ <div>
35
+ <input
36
+ type="text"
37
+ class=""
38
+ name="name"
39
+ v-model="name"
40
+ maxlength="80"
41
+ />
42
+ </div>
43
+ {{ name }}
72
44
  <button
73
45
  type="button"
74
46
  @click="regist"
@@ -92,43 +64,27 @@
92
64
  export default {
93
65
  props: {},
94
66
  data() {
95
- return {};
67
+ return {
68
+ name: "",
69
+ };
96
70
  },
97
71
  mounted() {
98
72
  console.log("test");
99
73
  },
100
74
  methods: {
101
75
  regist: () => {
102
- alert("コンポーネント押したよ");
76
+ console.log("oshitayo");
103
77
  },
104
78
  },
105
79
  };
106
80
  </script>
81
+
107
- ```
82
+ ```
108
-
109
- app.js
110
- ```
111
- //import './bootstrap'; vite削除でトアウト
83
+ mountedのconsole.log("test");は、コンソールに書き出されます。
112
- require('./bootstrap');
84
+
113
- //Vueで追加
85
+
114
- import Vue from 'vue'
86
+
115
-
116
- window.Vue = require('vue');
117
- Vue.component('OwnerForm', require('./component/admin/OwnerForm.vue').default);
118
-
119
- const app = new Vue({
120
- el: '#app',
121
- })
122
-
123
- //初期から記載
124
- import Alpine from 'alpinejs';
125
- window.Alpine = Alpine;
126
- Alpine.start();
127
- //ここまで
128
-
129
- ```
130
-
131
- bladeコンポーネント app.blade.php
87
+ blade側(create.blade.php)
132
88
  ```
133
89
  <!DOCTYPE html>
134
90
  <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
@@ -152,34 +108,59 @@
152
108
 
153
109
  <body class="font-sans antialiased">
154
110
  <div class="min-h-screen bg-gray-100" id="app">
155
- @if (auth('admin')->user())
156
- @include('layouts.admin-navigation')
157
- @elseif(auth('owners')->user())
158
- @include('layouts.owner-navigation')
159
- @elseif(auth('users')->user())
160
- @include('layouts.user-navigation')
161
- @endif
162
-
163
111
  <!-- Page Heading -->
164
112
  <header class="bg-white shadow">
165
113
  <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
166
- {{ $header }}
114
+ ヘッダー
167
115
  </div>
168
116
  </header>
169
117
 
170
118
  <!-- Page Content -->
171
119
  <main>
120
+ <div class="py-12" x-data="app">
121
+ <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
122
+ <div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
123
+ <div class="p-6 bg-white border-b border-gray-200">
124
+ <section class="text-gray-600 body-font relative">
125
+ <div class="container px-5 mx-auto">
126
+ <div class="flex flex-col text-center w-full mb-12">
127
+ <h1 class="sm:text-3xl text-2xl font-medium title-font mb-4 text-gray-900">
128
+ オーナー登録</h1>
129
+ </div>
172
- {{ $slot }}
130
+ <div>
131
+ <owner-form></owner-form>
132
+ </div>
133
+ </div>
134
+ </section>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ </div>
173
139
  </main>
174
140
  </div>
175
141
  <footer>
176
- フッター
142
+ フッターdayo
177
143
  </footer>
178
144
  <!--vueで追記-->
179
145
  <script src="{{ mix('js/app.js') }}"></script>
180
146
  </body>
181
147
 
182
148
  </html>
149
+
150
+ ```
151
+
152
+ app.js
153
+ ```
154
+ import './bootstrap';
155
+
156
+ import Vue from 'vue'
157
+
158
+ window.Vue = require('vue');
159
+ Vue.component('OwnerForm', require('./component/admin/OwnerForm.vue').default);
160
+
161
+ const app = new Vue({
162
+ el: '#app',
163
+ })
183
164
  ```
184
165
 
185
166
  package.json
@@ -215,23 +196,32 @@
215
196
  }
216
197
  ```
217
198
 
199
+ webpack.mix.js
200
+ ```
201
+ const mix = require('laravel-mix');
202
+
203
+ /*
204
+ |--------------------------------------------------------------------------
205
+ | Mix Asset Management
206
+ |--------------------------------------------------------------------------
207
+ |
208
+ | Mix provides a clean, fluent API for defining some Webpack build steps
209
+ | for your Laravel applications. By default, we are compiling the CSS
210
+ | file for the application as well as bundling up all the JS files.
211
+ |
212
+ */
213
+
214
+ mix.js('resources/js/app.js', 'public/js')
215
+ .postCss('resources/css/app.css', 'public/css', [
216
+ require('postcss-import'),
217
+ require('tailwindcss'),
218
+ require('autoprefixer'),
219
+ ]).vue();
220
+
221
+ ```
222
+
223
+
218
224
  アドバイスいただけますと幸いです。
219
225
  よろしくお願いいたします。
220
226
 
221
- 【追記1】
227
+
222
- app.jsの初期から記載されていた部分を以下のようにコメントアウトしましたら
223
- ```
224
- //初期から記載
225
- // import Alpine from 'alpinejs';
226
- // window.Alpine = Alpine;
227
- // Alpine.start();
228
- //ここまで
229
- ```
230
-
231
- こちらのエラーはなくなりました。
232
- ```
233
- Uncaught RangeError: Maximum call stack size exceeded
234
- ```
235
-
236
-
237
-

1

追記1を追加しました。

2022/07/26 10:19

投稿

mikeko0901
mikeko0901

スコア227

test CHANGED
File without changes
test CHANGED
@@ -218,6 +218,20 @@
218
218
  アドバイスいただけますと幸いです。
219
219
  よろしくお願いいたします。
220
220
 
221
-
221
+ 【追記1】
222
-
222
+ app.jsの初期から記載されていた部分を以下のようにコメントアウトしましたら
223
-
223
+ ```
224
+ //初期から記載
225
+ // import Alpine from 'alpinejs';
226
+ // window.Alpine = Alpine;
227
+ // Alpine.start();
228
+ //ここまで
229
+ ```
230
+
231
+ こちらのエラーはなくなりました。
232
+ ```
233
+ Uncaught RangeError: Maximum call stack size exceeded
234
+ ```
235
+
236
+
237
+