Javascript VueJS组件

Javascript VueJS组件,javascript,laravel,vue.js,vuejs2,Javascript,Laravel,Vue.js,Vuejs2,我想使用VueJS组件来清理脚本。因此,我在Laravel中加载的每个页面都有一个组件。到目前为止一切正常。但我在将当前脚本逻辑传输到组件时遇到问题 这是导入要使用的组件的当前脚本设置: main.js import HomeView from './components/HomeView.vue'; import IncidentView from './components/IncidentView.vue'; window.app = new Vue({ el: '.content

我想使用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>
通过定义
vueView
变量,将使用我在脚本中导入的正确模块

目标是使用
HomeView
组件作为谷歌地图的主视图。以及我在单击主题中的相应链接时加载的不同页面的其他组件。最后,我不希望将所有VueJS代码都放在一个脚本中。因此,模型是可行的

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

@extends('app', ['vueView' => 'home-view'])
@section('page_title', 'title')
@section('page_description', 'title')

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

导出默认值{
数据:{
//搜寻
地址组件:“”,
自动完成位置:“”,
自动完成地址:“”,
(...)
}

我如何修改我的组件,使app.init加载仍能正常工作?

如果我没弄错的话,你有一个谷歌地图脚本,加载后会调用window.app.init,对吗

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

或者:您不提及您的app.init是否是Vue组件的一部分。如果不是,则表明您的app.init函数正在被重写,因为您正在将window.app重新定义为Vue组件


最后,如果您的init是Vue的一部分,那么您的google maps fn回调是否在加载Vue之前调用此init(),因此不存在此类方法?

也许您应该使用或至少研究这样做的包的代码

例如,您可以在Github上检查vue google maps:


它定义了大量与谷歌地图相关的组件。

有人已经提到,npm上提供的组件为
vue谷歌地图
,但请注意,该版本仅适用于vue 1.x

如果您使用的是v2,请查看这个很棒的vue2分叉-它在npm上的
vue2 google maps
中提供

API非常简单,与v1版本相差不远,而且存储库比它的团队伙伴更活跃

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


我希望这有帮助

是的。我正在导入Google地图脚本,并告诉它通过脚本中的window.app.init调用在页面加载上加载init方法。我已经添加了init()方法,它不是偶然显示的,而是存在的,可以完美地加载与映射相关的所有内容。所有方法都在方法键内活动和工作。现在的目标是重构代码并作为“主”加载的页面包含地图视图,我想创建一个组件,该组件只包含此页面所需的所有内容。另一个页面将有不同的内容,我想在那里使用不同的方法。app.init不是组件的一部分。这些组件看起来就像现在描述的。实际上表达式
window.app=new Vue
让我头疼的是如何正确使用组件,因此当加载google maps脚本时,它会找到正确的init方法。因此,我应该如何构造它,将google maps设置为一个独立的JS服务,由Vue本身调用,可能在其创建的()中生命周期回调。通过这种方式,您可以更好地控制协调。您不必这样做,但您必须协调所有事情的时间,以便在从映射到Vue的回调进行之前,Vue组件可用。建议在Vue的created()和ready()中向控制台记录注释生命周期回调,在谷歌地图上做同样的操作,看看你的地图是否在你的VUE之前准备好了。另外一个例子是:如果你为不同的VUE组件共享谷歌地图功能,你可以考虑将谷歌地图代码打包为混合功能,可以在VUE实例之间共享,但只声明一次。(在mixin本身中)