Vue: method is not a function within inline-template component tag(Vue:方法不是内联模板组件标记中的函数)
问题描述
我有这个组件:
<template>
<div class="modal fade modal-primary" id="imageModal" tabindex="-1" role="dialog" aria-labelledby="ImageLabel"
aria-hidden="true">
<div class="modal-dialog modal-lg animated zoomIn animated-3x">
<div class="modal-content">
<ais-index index-name="templates"
app-id="BZF8JU37VR"
api-key="33936dae4a732cde18cc6d77ba396b27">
<div class="modal-header">
<algolia-menu :attribute="category"
:class-names="{ 'nav-item__item': 'nav-color', 'nav-item__link': 'nav-link', 'nav-item__item--active': 'active'}">
</algolia-menu>
</div>
<div class="modal-body">
<div class="container">
<ais-results :results-per-page="10" inline-template>
<div class="row">
<div class="col-6" v-for="result in results.slice(0, 5)" :key="result.objectID">
<div class="card" @click="getTemplate(result)">
<img class="img-fluid" v-lazy="result.image"/>
<div class="card-body">
<p>{{ result.description }}</p>
</div>
<div class="card-footer">
<small>Created: {{ result.created_at }}</small>
</div>
</div>
</div>
<div class="col-6" v-for="result in results.slice(5, 10)" :key="result.objectID">
<div class="card">
<img class="img-fluid" v-lazy="result.image"/>
<div class="card-body">
<p>{{ result.description }}</p>
</div>
<div class="card-footer">
<small>Created: {{ result.created_at }}</small>
</div>
</div>
</div>
</div>
</ais-results>
</div>
</div>
</ais-index>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
</template>
<script>
import Algolia from '@/components/algolia/menu';
export default {
components: {
"algolia-menu": Algolia,
},
data() {
return {
category: 'category',
};
},
methods: {
getTemplate(result) {
console.log(result)
}
}
}
</script>
我的 <ais-results>
标签内的 .card
div 上有一个点击监听器,它调用我的 getTemplate
方法.但是,每当我单击该元素时,都会产生此错误:
I have a click listener on the .card
div within my <ais-results>
tag which calls my getTemplate
method. But, whenever I click on that element, it produces this error:
imageModal.vue?8d74:85 Uncaught TypeError: _vm.getTemplate is not a功能点击时 (imageModal.vue?8d74:85)在调用者处 (vue.runtime.esm.js:2023)在 HTMLDivElement.fn._withTask.fn._withTask
imageModal.vue?8d74:85 Uncaught TypeError: _vm.getTemplate is not a function at click (imageModal.vue?8d74:85) at invoker (vue.runtime.esm.js:2023) at HTMLDivElement.fn._withTask.fn._withTask
为什么会这样?我也尝试过 @click.native
,但没有成功.
Why is this happening? I have tried @click.native
as well, but that didn't work.
推荐答案
问题是您使用的是 inline template 用于您的 <ais-results>
组件标签,因此该标签内的数据引用范围为 <ais-results>
实例.这意味着 Vue 正在 <ais-results>
组件上寻找 getTemplate
方法,但没有找到.
The issue is that you’re using an inline template for your <ais-results>
component tag, so the data references within that tag are scoped to the <ais-results>
instance. This means Vue is looking for a getTemplate
method on the <ais-results>
component, but not finding it.
在您的情况下,您可以使用 result
数据发出一个事件,然后在 <ais 上侦听该事件,而不是直接调用
标签.getTemplate
-results>
In your case, instead of directly calling getTemplate
, you could emit an event with the result
data and then listen for the event on the <ais-results>
tag.
下面是一个简化的例子,点击内联模板中的 .card
div 将发出 card-click
事件(@click="$emit('card-click', 结果)"
).<ais-results>
标记具有该事件的侦听器 (@card-click="getTemplate"
),因此当 card-click
事件被触发,getTemplate
方法将被调用并自动传递 result
数据.
Below is a simplified example where clicking on the .card
div in the inline template will emit a card-click
event (@click="$emit('card-click', result)"
). The <ais-results>
tag has a listener for that event (@card-click="getTemplate"
), so when the card-click
event is fired, the getTemplate
method will be called with the result
data being passed automatically.
<ais-results :results-per-page="10" inline-template @card-click="getTemplate">
<div class="row">
<div class="col-6" v-for="result in results.slice(0, 5)" :key="result.objectID">
<div class="card" @click="$emit('card-click', result)">
...
</div>
</div>
</div>
</ais-results>
这篇关于Vue:方法不是内联模板组件标记中的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Vue:方法不是内联模板组件标记中的函数
基础教程推荐
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 我什么时候应该在导入时使用方括号 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 动态更新多个选择框 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01