v-for更新数据只能使用数组的向相关方法??

来源:3-15 Vue中的列表渲染

qq_夜_71

2020-05-30 13:46:06

老师,你下载一下最新的vue.js看看,我用最新的dev环境的vue.js,通过数组下标修改元素,界面也会刷新.和您在课程中讲的不同.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript</title>
    <script src="vue.js"></script>
</head>
<body>
<div id="app">
    ID:<input type="text" v-model="id"/>
    userName:<input type="text" v-model="userName"/>
    <button @click="add">添加</button>
    <button @click="change">改变</button>
    <ul>
        <!-- v-for 遍历数组,使用 of ,为了防止复用,应当绑定属性key-->
 <li v-for="(value,index) of list" :key="value.id">
            <input type="checkbox"/>
            ID:{{value.id}} userName: {{value.userName}} index:{{index}}
        </li>

    </ul>
    <!-- v-for 遍历对象,使用 in ,为了防止复用,应当绑定属性key-->
 <ul>
        <li v-for="(value,key) in obj" :key="key">
            <p> {{value}} {{key}} </p>
        </li>
    </ul>

    <!--当使用v-for循环创建元素的时候,不想要外层的父元素,则可以使用template,template是占位符,不会渲染到页面上来-->
 <template v-for="item of paragraphs">
        <h3>{{item.title}}</h3>
        <p>{{item.content}}</p>
    </template>
</div>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            id: '',
            userName: '',
            list: [],
            obj: {
                name: 'jin',
                sex: 'nan',
                age: 18
 },
            paragraphs: [
                {
                    title: '我是标题1',
                    content: '我是内容1'
 },
                {
                    title: '我是标题2',
                    content: '我是内容2'
 },
                {
                    title: '我是标题3',
                    content: '我是内容3'
 }
            ]
        },
        methods: {
            add() {
                this.list.unshift({
                    id: this.id,
                    userName: this.userName
 })
                this.id = this.userName = ''
 },
            change() {
                this.paragraphs[1].title='修改后的标题'
 this.obj.sex='修改后的性别'
 this.list[0].id='修改后的id'
 }
        }
    })

</script>
</body>
</html>


写回答

1回答

好帮手慕慕子

2020-05-30

同学你好,与版本无关,因为同学代码的书写方式并不是直接通过下标修改内容,而是通过下标找到对象,然后修改了对象的属性值,所以会更新数据,页面发生变化。

另,由于改变obj.sex值会让页面重新传染,导致paragraphs和list修改后的数据显示在页面中。

http://img.mukewang.com/climg/5ed21173091d3d8407010373.jpg

建议:只通过下标修改数据,是无法重新渲染视图的。示例:

http://img.mukewang.com/climg/5ed211fc098fe98207130255.jpg

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

0

0 学习 · 10739 问题

查看课程