【问题标题】:Vue property not defined in instance for templateVue 属性未在模板实例中定义
【发布时间】:2018-02-27 20:32:43
【问题描述】:

我有一个显示一组曲目的 Vue 模板,但我的网站没有加载。控制台说

属性或方法“track”未在实例上定义,但在渲染期间被引用。确保在 data 选项中声明反应数据属性。 (在根实例中找到)

我确定这个问题与父子 vue 实例关系或类似的东西有关,但我不太确定,因为我才刚刚开始了解 vue.js

我阅读了这个https://vuejs.org/v2/guide/components.html#Using-v-on-with-Custom-Events,但我很难看出问题所在。怎么了?

这是html中的模板:

<div id="vue-div">
    <template v-for="track in spotifyResults.items">
         <spotify :track="track"></spotify>
    </template>

    <!-- spotify vue template -->
    <script type="text/x-template" id="spotifyResult">
        <tr>
            <td>
                <img :src="track.album.images[2].url"/>
            </td>
            <td>${track.artists[0].name}
            </td>
            <td>${track.album.name}
            </td>
            <td>${track.name}
            </td>
            <td>
                <a :href="track.uri">Play</a>
            </td>
            <td><span v-on:click="add_track_to_library(track.album.images[2].url, track.artists[0].name, track.album.name, track.name, spotify, track.uri, none)">+</span></td>
        </tr>
    </script>
</div>

这里是js:

var spotify = {
        template: '#spotifyResult',
        delimiters: ['${', '}'],
        props: ['track']
    }

self.vue = new Vue({
    el: "#vue-div",
    delimiters: ['${', '}'],
    unsafeDelimiters: ['!{', '}'],
    components: {
        spotify: spotify,
    },
    data: {
        spotifyResults: {
                items: []
            },
    }
});

【问题讨论】:

  • 您的&lt;template v-for="track in spotifyResults... 代码到底放哪里了?
  • @Stephan-v 我已经把它放在了 vue-div 中

标签: javascript vue.js vue-component


【解决方案1】:

您错误地定义了组件模板。 Vue 正在尝试将您的 #spotifyResult 模板呈现为 &lt;template&gt; 块。

要使用X-Templates,请使用

<script type="text/x-template" id="spotifyResult">
  <tr>
    <!-- etc -->
  </tr>
</script>

这个&lt;script&gt;标签需要放在你的主.html文件中,根元素之外。

JSFiddle 演示~https://jsfiddle.net/7u0aboe6/3/

【讨论】:

  • 感谢您指出这一点!我进行了更改,但仍然收到相同的错误消息。我已经编辑了原始帖子以反映更改。
  • @user2030942 没有看到任何变化。
  • 立即查看。我忘了保存我的更改
  • @user2030942 正如预期的那样,您已将 &lt;script&gt; 标记放在根 Vue 元素中。不要那样做
猜你喜欢
  • 2021-11-19
  • 2021-03-18
  • 2021-07-17
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 2017-11-26
相关资源
最近更新 更多