VueJS コンポーネントを利用してスクリプトをクリーンアップしたいと考えています。したがって、Laravel にロードする各ページのコンポーネントがあります。これまでのところ、すべて正常に動作しています。しかし、現在のスクリプト ロジックをコンポーネントに転送する際に問題があります。
これは、使用するコンポーネントをインポートする現在のスクリプト設定です。
main.js
import HomeView from './components/HomeView.vue';
import IncidentView from './components/IncidentView.vue';
window.app = new Vue({
el: '.content',
components: {
HomeView, IncidentView
},
methods: {
// Init GIS
init: function() {
// Initialize GIS Map
initGISMap(this.$els.map);
},
}
(...)
}
私にとっての鍵はそのwindow.app = new Vue...
部分です。私は Google マップを使用しているため、ページが読み込まれると app.init メソッドが検索されます。これは、ブレード テンプレート内にロードしているスクリプトの一部です。
<!DOCTYPE html>
<html>
<body class="hold-transition skin-blue sidebar-mini">
<section class="content-header">
<h1>
@yield('page_title')
<small>@yield('page_description')</small>
</h1>
</section>
<!-- Main content -->
<section class="content">
@if (isset($vueView))
<component is="{{ $vueView }}">
@endif
@yield('content')
</component>
</section>
<!-- /.content -->
<script src="https://maps.googleapis.com/maps/api/js?key=KEY&libraries=places&callback=app.init" async defer></script>
</body>
</html>
個々のページ (Vue のモジュールごとに作成する場所) は次のようになります。
@extends('app', ['vueView' => 'home-view'])
@section('page_title', 'title')
@section('page_description', 'title')
@section('content')
content
@endsection
変数を定義することvueView
で、スクリプトにインポートしている正しいモジュールが使用されます。
目標は、HomeView
コンポーネントをメインの Google マップ ビューとして使用することです。そして、テーマの対応するリンクをクリックしたときにロードするさまざまなページの他のコンポーネント。最後に、すべての VueJS コードを 1 つのスクリプトに含めたくありません。したがって、モデル。
この現在の JS ファイルのすべてのコンテンツを転送するとapp.init
、関数ではないというエラーが表示されます。コンポーネントは次のようになります。
<script>
export default {
data: {
// SEARCH
addressComponents: '',
autocompletePlace: '',
autocompleteAddress: '',
(...)
}
app.init ロードが機能するようにコンポーネントを変更するにはどうすればよいですか?