首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方法不是内联模板组件标记中的函数。

方法不是内联模板组件标记中的函数。
EN

Stack Overflow用户
提问于 2018-08-02 16:09:35
回答 1查看 4.2K关注 0票数 3

我有这样的组成部分:

代码语言:javascript
复制
<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>

我在我的.card标记中的<ais-results> div上有一个单击侦听器,它调用了我的getTemplate方法。但是,每当我单击该元素时,它都会产生以下错误:

imageModal.vue?8d74:85 Uncaught:_vm.getTemplate不是在HTMLDivElement.fn._withTask.fn._withTask的invoker (vue.runtime.esm.js:2023)上单击时的函数(imageModal.vue?8d74:85)

为什么会发生这种情况?我也尝试过@click.native,但那没有效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 13:51:53

问题是,您使用内联模板作为<ais-results>组件标记,因此该标记中的数据引用被限定为<ais-results>实例。这意味着Vue正在寻找<ais-results>组件上的一个<ais-results>方法,但没有找到它。

在您的示例中,您可以发出带有getTemplate数据的事件,而不是直接调用result,然后侦听<ais-results>标记上的事件。

下面是一个简化的示例,单击内联模板中的.card div将发出一个card-click事件(@click="$emit('card-click', result)")。<ais-results>标记具有该事件的侦听器(@card-click="getTemplate"),因此当触发card-click事件时,将调用getTemplate方法,并自动传递result数据。

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51658044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档