javascript - vue单文件,数据要怎么传进去?
大家讲道理
大家讲道理 2017-04-10 18:08:29
[JavaScript讨论组]

我想在页面上拿到一个接口数据:vuedata,然后用vue把数据渲染成列表。
不使用单文件的时候,像下面这样用是没问题的。

html

<p id="list">
    <ul>
        <li v-for="todo in todos">
            {{ todo.text }}
        </li>
    </ul>
</p>

js

let vuedata      = {
    todos: [
        {text: 'Learn JavaScript'},
        {text: 'Learn Vue.js'},
        {text: 'Build Something Awesome'}
    ]
};

let list = new Vue({
    el: '#list',
    data: vuedata
});

然后想把这个功能做成单个vue文件,希望使用的时候传入要绑定的el和data就行了。data不是在vue文件里面获取,是从外部传进去。

html如下

<app></app>

js

let vuedata      = {
    todos: [
        {text: 'Learn JavaScript'},
        {text: 'Learn Vue.js'},
        {text: 'Build Something Awesome'}
    ]
};

import app from './app.vue';
let list = new Vue({
    el: 'body',
    data: vuedata,
    components: { app }  //这里我不确定是不是该这样写
});

app.vue

<style lang="sass">
...
</style>


<template>
    <p id="app">
        <ul>
            <li v-for="todo in todos">
                {{ todo.text }}
            </li>
        </ul>
    </p>
</template>


<script>
    export default {
        props: ['todos']  //获取外部的todos
    }
</script>

不过这样根本不行,DOM里面ul内部是空的,似乎哪一步没做对,数据没传过去。

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
高洛峰

定义了组件的props,用组件的时候就要传进去

<app :todos="todos"></app>

更新

第一种情况正常是因为在解析<li v-for="todo in todos">{{ todo.text }}</li>时,会从data(也就是vuedata)中去寻找todos这个属性,也就是你let vuedata中定义的。

第二种情况,你将todo变成了component,且需要输入参数(props)todos才能正常渲染。所以你在使用这个组件的时候(<app></app>)需要传入todos数组。和第一种情况相同,这里的<app></app>的作用域也是在data(vuedata)里的的直接属性(todos),所以给component传值就得写成:

<app :todos="todos"></app>
PHP中文网

最近刚开始看vue,父子组件传值是个高难度动作,加油

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号