SlideShare a Scribd company logo
Laravel Blade
×
vue.js
混在させる場合の注意点
Seiichiro Kurihara
株式会社クリエイターズマッチ
サーバーサイドエンジニア
Bladeとvue.jsを混在させる場合以下の3点を
気にする必要があります。
• Bladeの記述とvue.jsの記述の衝突
• ブラウザのDOM解析
• ブラウザのjavascriptの挙動
Bladeの記述とvue.jsの記述が衝突するケース
Bladeの記述とvue.jsの記述が衝突するケース
「v-onの省略」
clickイベントでshowというイベントをemit
したい
Vue.component('custom-component', {
template:`<div v-on:click="@emit('show’)">Button</div>`
});
custom-component.js
<custom-component @show="show"></custom-component>
sample.blade.php
v-onを省略して@にしています。
Bladeで@showと衝突してエラー
v-onは省略せず書きましょう!!
メモ
Bladeが今後どんなタグを実装してくるかわからないので、
現在定義されていない@であってもv-onは省略すべきではありません。
<custom-component v-on:show="show"></custom-component>
sample.blade.php
ブラウザのDOM解析が問題になるケース
ブラウザのDOM解析が問題になるケース
「スタイル属性のバインディング」
スタイル属性のwidthに値をバインド
var app = newVue({
el:'#app‘,
data:{
width: ‘300px’
}
});
sample.js
<div style=“width:@{{ width }}”></div>
sample.blade.php
widthの値を直接バインドしている
インラインスタイルに無効なスタイルが存在す
る場合、ブラウザはそのスタイルを無視する挙
動をするので、@{{width}}の部分が無効なスタイル
と判断されて、無視されてしまう。
素直にv-bindを使いましょう
<div v-bind:style=“{ width: width }”></div>
sample.blade.php
ブラウザのDOM解析が問題になるケース
「自己終了形式のコンポーネント」
slot等を使用しないコンポーネントの場合、自己
終了形式のタグが推奨されているので自己終了
形式する
<custom-component/>
sample.blade.php
HTML5の仕様上、カスタムタグの自己終了
形式を許可していないので、コンポーネ
ントが消えてしまったりする。
諦めて、閉じタグを書きましょう。
<custom-component></custom-component>
sample.blade.php
ブラウザのjavascriptの挙動が問題なるケース
ブラウザのjavascriptの挙動が問題なるケース
「BladeでのES2015(ES6)の記述」
vue.jsのドキュメントに記述のmodelの実装をそ
のまま書いてみる
<input
v-bind:value=“something”
v-on:input=“(value)=>{ something = value }”
>
sample.blade.php
アロー関数使っています
残念ながら、IE11をはじめES2015(ES6)非対応のブ
ラウザでエラーになります。
babel等でES2015 (ES6)に対応したとしても、blade
はコンパイルされない。
あきらめてES5で書くかメソッドにしましょ
う
<input
v-bind:value=“something”
v-on:input=“function(value) {something=value}”
>
sample.blade.php
<input
v-bind:value=“something”
v-on:input=“onInput”
>
sample.blade.php
ブラウザのjavascriptの挙動が問題なるケース
「Filter」
普通にfilterを書いてみる。
追加引数ありバージョン
追加引数なしバージョン
<div>
@{{ value | filter() }}
</div>
sample.blade.php
<div>
@{{ value | filter2('argvalue') }}
</div>
sample.blade.php
追加の引数なしfilterがIEでエラー
追加引数がない場合は()を省略しましょう
<div>
@{{ value | filter }}
</div>
sample.blade.php
ブラウザのjavascriptの挙動が問題なるケース
「v-modelに未定義プロパティを入れる」
v-modelに未定義なプロパティを入れる!!
<input v-model="obj.value">
sample.blade.php
var app = newVue({
el:'#app‘,
data:{
obj:{}
}
});
sample.js
当然エラー
といいたいところですが
IE以外はエラーを吐いてくれません
そもそも未定義プロパティは作らないよう
にしましょう。
var app = newVue({
el:'#app‘,
data:{
obj:{
value: true
}
}
});
sample.js
<input v-model="obj.value">
sample.blade.php
まとめ
• v-onは省略しない
• style属性のバインディングは必ずv-bindを使う
• コンポーネントを自己終了形式で書かない
• ES2015(ES6)を書かない
• Filterに追加引数がない場合は()を書かない
• 未定義のプロパティを参照しないよう気をつける

More Related Content

What's hot

A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
ester41
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
増田 亨
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
cyberagent
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
Yu Tanaka
 
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
NTT DATA Technology & Innovation
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
 
ライブストリーミング低遅延化の取り組み @ DeNA
ライブストリーミング低遅延化の取り組み @ DeNAライブストリーミング低遅延化の取り組み @ DeNA
ライブストリーミング低遅延化の取り組み @ DeNA
akirahiguchi
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
Kenjiro Kubota
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
TomomitsuKusaba
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
日本マイクロソフト株式会社
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
 

What's hot (20)

A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えしますA5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
ドメイン駆動設計入門
ドメイン駆動設計入門ドメイン駆動設計入門
ドメイン駆動設計入門
 
Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介Amebaにおけるレコメンデーションシステムの紹介
Amebaにおけるレコメンデーションシステムの紹介
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!【Swift】 それ、enumとstructでやってみましょう!!
【Swift】 それ、enumとstructでやってみましょう!!
 
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
ライブストリーミング低遅延化の取り組み @ DeNA
ライブストリーミング低遅延化の取り組み @ DeNAライブストリーミング低遅延化の取り組み @ DeNA
ライブストリーミング低遅延化の取り組み @ DeNA
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 

Similar to Laravel Blade×vue.js 混在させる場合の注意点

Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
Kei Yagi
 
React Helmet navigates SPA
React Helmet navigates SPAReact Helmet navigates SPA
React Helmet navigates SPA
Takao Tetsuro
 
Reacthelmetcontrolesspa
ReacthelmetcontrolesspaReacthelmetcontrolesspa
Reacthelmetcontrolesspa
Takao Tetsuro
 
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
Shinji Tanaka
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
miso- soup3
 
Brush up your Coding! 2013 winter
Brush up your Coding! 2013 winterBrush up your Coding! 2013 winter
Brush up your Coding! 2013 winter
Shogo Sensui
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
Yoshitaka Seo
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
Kentaro Inomata
 
Playで作るwebsocketサーバ
Playで作るwebsocketサーバPlayで作るwebsocketサーバ
Playで作るwebsocketサーバ
ke-m kamekoopa
 
Blazor 触ってみた
Blazor 触ってみたBlazor 触ってみた
Blazor 触ってみた
Oda Shinsuke
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
Yasuhito Yabe
 
Blazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみたBlazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみた
Naito Oshima
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-onSeiji Noro
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後Akira Inoue
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
tobaru_yuta
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
Kei Yagi
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotationEIICHI KIMURA
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Kei Yagi
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
Takayoshi Tanaka
 

Similar to Laravel Blade×vue.js 混在させる場合の注意点 (20)

Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
 
React Helmet navigates SPA
React Helmet navigates SPAReact Helmet navigates SPA
React Helmet navigates SPA
 
Reacthelmetcontrolesspa
ReacthelmetcontrolesspaReacthelmetcontrolesspa
Reacthelmetcontrolesspa
 
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
Brush up your Coding! 2013 winter
Brush up your Coding! 2013 winterBrush up your Coding! 2013 winter
Brush up your Coding! 2013 winter
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
ASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみたASP.NET MVCとEntity Frameworkで作ってみた
ASP.NET MVCとEntity Frameworkで作ってみた
 
Playで作るwebsocketサーバ
Playで作るwebsocketサーバPlayで作るwebsocketサーバ
Playで作るwebsocketサーバ
 
Blazor 触ってみた
Blazor 触ってみたBlazor 触ってみた
Blazor 触ってみた
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 
Blazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみたBlazor Web Assembly (C#) を触ってみた
Blazor Web Assembly (C#) を触ってみた
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
 
マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後マイクロソフトWeb開発の今と今後
マイクロソフトWeb開発の今と今後
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
 

Laravel Blade×vue.js 混在させる場合の注意点