14

我想利用 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...零件。我使用谷歌地图,因此在加载页面时它会搜索 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组件作为主要的谷歌地图视图。以及单击主题中的相应链接时加载的不同页面的其他组件。最后,我不想在一个脚本中包含所有 VueJS 代码。因此模型。

当我传输这个当前 JS 文件的所有内容时,我收到一个错误,抱怨这app.init不是一个函数。该组件如下所示:

<script>
export default {
   data: {
       // SEARCH
       addressComponents: '',
       autocompletePlace: '',
       autocompleteAddress: '',
(...)
}

如何以某种方式修改我的组件,以使 app.init 加载仍然有效?

4

3 回答 3

7

也许您应该使用或至少研究执行此操作的包的代码。

例如,您可以在 Github 上查看vue-google-maps : https ://github.com/GuillaumeLeclerc/vue-google-maps/

它定义了很多与谷歌地图相关的组件。

于 2016-05-10T15:52:16.817 回答
7

有人已经提到GuillaumeLeclerc/vue-google-maps可在 npm as 上使用vue-google-maps,但请注意该版本仅适用于 vue 1.x

如果您使用的是 v2,请查看这个很棒的 vue2 fork xkjyeah/vue-google-maps - 它vue2-google-maps在 npm 上可用。

API 简单明了,与 v1 版本相差不远,并且存储库比其上游对应物更活跃。

它确实让我的 vue 地图工作起来比滚动我自己的地图要轻松得多,这是我最初所做的。

我希望这会有所帮助

于 2016-11-28T22:14:41.417 回答
1

如果我理解正确,你有一个谷歌地图脚本,加载时调用window.app.init,对吗?

您的 Vue 组件是否有 init() 方法(上面没有显示)?如果有的话,它需要在 app.methods.init() 记住对于 VueJS,标准的可调用方法位于 methods 键下。

或者:您没有提及您的 app.init 是否是 Vue 组件的一部分。如果不是,您的 app.init 函数似乎被覆盖,因为您将 window.app 重新定义为您的 vue 组件。

最后,如果您的 init 是 Vue 的一部分,那么您的谷歌地图 fn 回调是否在 Vue 加载之前调用了这个 init(),因此(还)不存在这样的方法?

于 2016-05-10T15:30:04.557 回答