Vue TypeError _vm不是函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue TypeError _vm不是函数相关的知识,希望对你有一定的参考价值。
在我的Vue组件中,名为Home.vue
,我包括this Google Maps plugin,如下所示
<GmapMap
:center="{lat: 45.919849, lng: 25.0203875}"
:zoom="7"
map-type-id="terrain"
style="width: 100%; height: 600px"
>
<GmapMarker
:key="markerIdx"
v-for="(m, markerIdx) in results"
:position="getMarkerPosition(m.locationCoordinates)"
:clickable="true"
:draggable="false"
/>
</GmapMap>
对象results
来自父标签,m.locationCoordinates
是String
。 :position
的GmapMarker
需要一个JSON对象。我正在定义一个getMarkerPosition
函数来将该字符串转换为JSON,就像这样
export default {
methods: {
getMarkerPosition: function (coordinateString) {
let split = coordinateString.split(',')
return {
lat: parseFloat(split[0]),
lng: parseFloat(split[1])
}
}
}
}
但我最终得到一个浏览器错误说
TypeError: _vm.getMarkerPosition is not a function
at eval (eval at ./node_modules/vue-loader/lib/template-compiler/index.js?
{"id":"data-v-8dc7cce2","hasScoped":false,"transformToRequire":{"video":
["src","poster"],"source":"src","img":"src","image":"xlink:href"},"buble":
{"transforms":{}}}!./node_modules/vue-loader/lib/selector.js?
type=template&index=0!./src/components/Home.vue
(0.96557ac29cc33c9d2325.hot-update.js:22), <anonymous>:180:63)
at Proxy.renderList (vue.esm.js?efeb:3705)
at Proxy.render (eval at ./node_modules/vue-loader/lib/template-
compiler/index.js?{"id":"data-v-
8dc7cce2","hasScoped":false,"transformToRequire":{"video":
["src","poster"],"source":"src","img":"src","image":"xlink:href"},"buble":
{"transforms":{}}}!./node_modules/vue-loader/lib/selector.js?
type=template&index=0!./src/components/Home.vue
(0.96557ac29cc33c9d2325.hot-update.js:22), <anonymous>:173:47)
at VueComponent.Vue._render (vue.esm.js?efeb:4544)
at VueComponent.updateComponent (vue.esm.js?efeb:2788)
at Watcher.get (vue.esm.js?efeb:3142)
at Watcher.run (vue.esm.js?efeb:3219)
at flushSchedulerQueue (vue.esm.js?efeb:2981)
at Array.eval (vue.esm.js?efeb:1837)
at flushCallbacks (vue.esm.js?efeb:1758)```
整个代码在Home.vue
。我只在Vue.use(VueGoogleMaps)
宣布main.js
答案
我想分享我的解决方案,以防任何人遇到类似的问题。
主要问题是我的GmapMap
的父母是另一个名为ais-results
的组件(来自Vue InstantSearch),它具有inline-template
属性。这意味着ais-results
标签内的任何内容都无法看到“外部”。
我优雅的解决方案是在单独的组件/文件中提取GmapMap
,我可以在其中定义所有必需的方法。当我使用我的新组件时,我只是将数据作为props
传递给它。
另一种解决方案是避免使用inline-template
属性。
相关问题和资源:
- Vue: method is not a function within inline-template component tag
- Vue inline template not finding methods or data
- https://medium.com/js-dojo/7-ways-to-define-a-component-template-in-vuejs-c04e0c72900d
- https://community.algolia.com/vue-instantsearch/components/results.html
请记住,我是反应性和Vue的初学者。干杯
以上是关于Vue TypeError _vm不是函数的主要内容,如果未能解决你的问题,请参考以下文章
如何摆脱 v-on 处理程序中的错误:“TypeError:_vm.myFcn 不是函数”?
未捕获的TypeError:events.forEach不是函数Leaflet和VueJS