尝试循环数组数据或v-for时,Vuejs不会正确呈现组件

时间:2016-03-01 16:41:59

标签: javascript components vue.js

        <!DOCTYPE html>
    <html lang="en">
    <head>
        <script src="js/vue.js"></script>

        <meta charset="UTF-8">

        <title>V-for example</title>

    </head>
    <body>
    <script type="x/template" id="testTemplate">

        <div><h1>{{name}}</h1>

            <p>{{Age}}</p></div>
    </script>
    <div id="example">


        <div id="filler">
    <template v-for="person in people">
    <test-component name="{{person.name}}"></test-component>
</template>
        </div>
    </div>


    <script>

        var newComponent = Vue.extend({
            template: '#testTemplate',
            props: ['name'],
            data: function () {
                return {
                    Age: 1010
                }
            }
        });
        Vue.component('test-component', newComponent);


        new Vue({
            el: '#example',
            data: {
                people: [{
                    name: 'jason',
                    age: 15,
                    complete: true
                }, {
                    name: 'Jeremy',
                    age: 20,
                    complete: false
                }]


            },
            ready: function () {
                var divoutput = document.querySelector('#filler');
                alert(divoutput.innerHTML);
                len = this.$data.people.length;
                for (i = 0; i < len; i += 1) {
                    var nameT = this.$data.people[i].name;

                    divoutput.innerHTML += '<test-component name="' + nameT + '"></test-component>';

                }

            },

        });


    </script>

    </body> </html>

我试图占用Vue数据数组中的所有人并将其注入组件并在Vue.ready()函数期间将其添加到div的innerHTML中。我表明结果正被注入&#34;填充物&#34;数组,但他们自己的组件没有正确呈现。如果我制作我的组件的手动实例,它工作正常。

1 个答案:

答案 0 :(得分:1)

您不应该尝试使用innerHTML添加Vue组件。那是自己管理DOM的,让Vue自己做。这是一个小提琴:

https://jsfiddle.net/xccjsp4b/

我将脚本模板更改为div,因为我不确定您是否可以使用脚本标记(尽管我可能错了)。然后,您只需使用v-for循环访问人员并将相关数据作为属性传递。如果每个人都有自己的年龄,你希望它是一个属性而不是数据变量。

此外,使用:name="person.name"而不是name="{{person.name}}"的速记绑定。 :告诉Vue评估表达式。