Vue Component props值似乎不在模板上

时间:2017-09-23 11:11:23

标签: vue.js vuejs2 vue-component

我的main.js中的一切都很好

import User from './components/User.vue'

new Vue({
    el: '#user',
    render: h => h(User),
    data() {
        return {
            groups: []
        }
    },
    mounted() {
        this.getGroups();
    },
    methods: {
        getGroups: function () {
            axios.get('http://vagrant.dev/groups')
                .then(response => this.groups = response.data)
                .catch(error => console.log(error));
        }
    }
});

User.vue

<template>
    <div id="user">
        {{groups}} <!-- must be printed but it doesn't seem -->
    </div>
</template>
<script>
    export default {
        name: 'user',
        props: ['groups']
    }
</script>

和index.html

<div id="user">
    <user :groups="groups"></user>
</div>

enter image description here

错误在哪里?

我没有收到任何错误,但我不明白为什么这个值没有打印在屏幕上

2 个答案:

答案 0 :(得分:0)

您的main.jsindex.html不应在HTML和渲染功能中混合使用模板。所以你的main.js应该是:

```new Vue({
  el: '#user',
  components: { User },
  data() {
      return {
         groups: []
      }
  },
...```
  1. 您不应直接重新分配数据值,因为Vue无法检测属性添加和重新呈现视图。您应该通过Vue.setthis.$set这样执行此操作:

    this.$set(this, 'groups', response.data)

  2. 您可以在https://vuejs.org/v2/guide/reactivity.html和Vue.set API中详细了解vue如何反应:https://vuejs.org/v2/api/#Vue-set

答案 1 :(得分:0)

似乎您将2个Vue实例放在同一个模板上,因为在您的主文件中,您将模板定义为el: "#user",该模板已由User.vue控制。

在index.html中添加一个带有id="app"的div,并在main.js中添加el: "#app"