带有v-for的Vue内联模板 - 未定义

时间:2017-06-21 19:36:24

标签: vue.js vuejs2 vue-component

我正在尝试学习Vue并尝试使用内联模板和v-for循环来实现一个简单的测试。

当我加载下面的页面时,收到以下错误,并且没有内容呈现在屏幕上。

  

[Vue警告]:未在实例上定义属性或方法“posts”   但在渲染期间引用。确保声明反应数据   数据选项中的属性。

我是Vue的初学者,但是非常感谢任何帮助。

<!DOCTYPE html>

<html>
    <head>
        <title>Vue Test</title>

        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

        <script src="http://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
        <script src="https://unpkg.com/vue@2.3.4/dist/vue.js"></script>
    </head>

    <body>
        <div id="vue-app" class="container">
            <post-list inline-template v-for="(post, index) in posts" :key="post.id">
                <div class="post">
                    <h1>{{ post.subject }}</h1>
                </div>
            </post-list>
        </div>

        <script>
            Vue.component('post-list', {
                data: function() {
                    return {
                        posts: [
                            { id: 0, subject: 'The first post subject' },
                            { id: 1, subject: 'The second post subject' }
                        ]
                    }
                }
            });

            new Vue({
                el: '#vue-app'
            });
        </script>
    </body>
</html>

谢谢。

1 个答案:

答案 0 :(得分:2)

您的v-for需要在模板中。 inline-template表示 inside 元素中的所有内容都是模板。

  

该组件将使用其内容作为其模板

v-for不在里面,所以它试图迭代post-list组件在根Vue上寻找posts并且它不在那里。

此外,迭代根元素会导致多个根(不允许),所以我将v-for包裹在div中。

Vue.component('post-list', {
  data: function() {
    return {
      posts: [{
          id: 0,
          subject: 'The first post subject'
        },
        {
          id: 1,
          subject: 'The second post subject'
        }
      ]
    }
  },

});

new Vue({
  el: '#vue-app'
});
<script src="https://unpkg.com/vue@2.2.6/dist/vue.js"></script>
<div id="vue-app" class="container">
  <post-list inline-template>
    <div>
      <div class="post" v-for="(post, index) in posts" :key="post.id">
        <h1>{{ post.subject }}</h1>
      </div>
    </div>
  </post-list>
</div>