Javascript VueJS组件
我想使用VueJS组件来清理脚本。因此,我在Laravel中加载的每个页面都有一个组件。到目前为止一切正常。但我在将当前脚本逻辑传输到组件时遇到问题 这是导入要使用的组件的当前脚本设置: main.jsJavascript 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
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本身中)