vue 数组添加数据方式

目录
  • vue 数组添加数据
    • 数据添加分为三种方法
  • 动态向数组中添加对象(关于v-for,input和push)
    • 核心:深拷贝

vue 数组添加数据

数据添加分为三种方法

  • 1.unshift()
  • 2.push()
  • 3.splice()
<template>
      <div>
        <ul>
          <li v-for="(time,index) of listTable" :key="index" @click="copyNew(time,index)">
            {{time.id}}{{time.name1}}{{time.name2}} 添加
          </li>
        </ul>
    </div>
</template>
<script>
export default {
     data(){
        return{
          listTable:[
            {id:'1',name1:'a1',name2:'b1'},
            {id:'2',name1:'a2',name2:'b2'},
            {id:'3',name1:'a3',name2:'b3'},
          ],
        }
      },
 }
 </script>

1.unshift() //数组头部添加一条新数据

let newList = {
   id:'4'
   name1:'a4',
   name2:'b4',
 }
this.listTable.unshift(newList)  //unshift()在数组头部添加一条数据 
console.log(this.listTable)

2.push() //数组末端添加一条新数据

this.listTable.push(newList)  //push()在数组末端添加一条数据 
console.log(this.listTable)

3.splice() //数组操作

 copyNew(time,index){
   console.log(time)
   let newList = {
     id:time.id,
     name1:time.name1,
     name2:time.name2,
   }
   //第一个参数为需要操作数据的下标,第二个参数为操作添加/删除(0为添加,1为不操作,2为删除,3为删除多条数据),第三个参数可选
   this.listTable.splice(index,0,newList) 
   console.log(this.listTable)
 }

4.concat() // 数组合并

let arrA = [1,2,3]
let arrB = [4,5]
arrA.concat(arrB) // 输出 1,2,3,4,5
let arrC = [6,7]
arrA.concat(arrB,arrC) // 输出 1,2,3,4,5,6,7

动态向数组中添加对象(关于v-for,input和push)

核心:深拷贝

第一步:

写在data(): 设datas数组,以及datas中需求的对象

datas: [],
data_formInput: {
    keyword: '',//关键字
    describe: '',//描述
},

第二步:(对象中的属性,input中的数据)双向绑定

<view class="box" v-show="box_show">
    <view class="box_text">请输入关键字</view><input type="text" v-model="data_formInput.keyword" />
    <view class="box_text">请输入描述</view><input type="text" v-model="data_formInput.describe" />
    <button type="default" @click='create'>确定</button>
</view>

第三步:深拷贝保存数据并置空input

create() {
//这里要设一个对象来进行深拷贝才能避免每次push的时候都被最后一次提交的数据覆盖,也可以避免置空的时候数据丢失
    let obj = {
        keyword: this.data_formInput.keyword,
        describe: this.data_formInput.describe
    }
    this.datas.push(obj);
    this.data_formInput.keyword = ''//提交input之后置空
    this.data_formInput.describe = ''
},

第四步:循环显示刚刚input提交的数据

<button type="default" v-for="(item,index) in datas" :key='index' @click='open(item.describe)'>
      {{item.keyword}}
</button>

放一段完整代码:

挺多的,实现了点击添加关键字按钮的时候打开输入关键字和描述,提交的页面,点击提交的时候显示已保存的关键字数据。逻辑很简单,主要是记录一下这里的深拷贝。

<template>
    <view class="">
        
        
        <!-- 这里是输入关键字和描述 -->
        <view class="box" v-show="box_show">
            <view class="box_text">请输入关键字</view><input type="text" v-model="data_formInput.keyword" />
            <view class="box_text">请输入描述</view><input type="text" v-model="data_formInput.describe" />
            <button type="default" @click='create'>确定</button>
        </view>
        
        
        
        <!-- 这里显示已提交的关键字以及添加关键字按钮 -->
        <view v-show="button_show">
            <button type="default" v-for="(item,index) in datas" :key='index'
                @click='open(item.describe)'>{{item.keyword}}</button>
            <u-popup :show="show" @close="close" mode="center" round=20 closeable=true>
                <view>
                    {{show_describe}}
                </view>
            </u-popup>
            <button type="default" @click='open_box'>添加关键字</button>
        </view>
        
        
    </view>
</template>
<script>
    export default {
        data() {
            return {
                datas: [],
                data_formInput: {
                    keyword: '', //关键字
                    describe: '', //描述
                },
                show_describe: '',
                show: false,
                box_show: false,
                button_show: true,
            }
        },
        methods: {
            create() {
                let obj = {
                    keyword: this.data_formInput.keyword,
                    describe: this.data_formInput.describe
                }
                this.datas.push(obj);
                this.data_formInput.keyword = ''//提交input之后置空
                this.data_formInput.describe = ''
                this.box_show = false
                this.button_show = true
            },
            // 打开描述
            open(t) {
                this.show = true
                this.show_describe = t
            },
            close() {
                this.show = false
            },
            open_box() {
                this.box_show = true
                this.button_show = false
            }
        }
    }
</script>
<style scoped>
    .box {
        width: 100%;
        height: 500rpx;
        overflow: hidden;
        /* margin-top: 50rpx; */
        background-image: url(https://pic.imgdb.cn/item/624c0962239250f7c58f97a2.png);
        background-repeat: no-repeat;
        background-size: cover;
    }
    .box_text {
        text-align: center;
        margin-bottom: 20rpx;
    }
    input {
        width: 80%;
        height: 30rpx;
        border: 1rpx solid black;
        margin-top: 50rpx;
        overflow: hidden;
        margin: 10rpx auto;
        padding-left: 20rpx;
        font-size: 25rpx;
    }
</style>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue 如何删除数组中的某一条数据

    目录 删除数组中的某一条数据 删除普通数组 删除数组对象 使用splice()删除数组中的一个数据 删除数组中的某一条数据 删除普通数组 let arr = [1,2,3,4,5]; //方法一 let index = arr.indexOf('3'); arr.splice(index, 1) //打印结果 [1,2,4,5] //方法二 let index = arr .findIndex(item => {             if (item == '3') {          

  • Vue如何根据id在数组中取出数据

    目录 如何根据id在数组中取出数据 Vue获取数组的数组数据 如何根据id在数组中取出数据 这是一个非常实用的操作,尤其是编辑数据的时候.点击编辑数据,通常会将编辑的这条数据发送给后端,然后后端在根据这个编号查询出相应的数据在返回给前端. 那么请问,后端都将数据给你了,你直接在数组中取出来不是很好吗? 这样简单快捷.可以给后端避免没有必要的负担,万一网络不好还会获取失败,尤其现在带宽这么贵. JS中有一个 findIndex()方法就是获取对应数据在数组中的索引,然后就可以根据这个索引在数组中取

  • Vue实现添加数据到二维数组并显示

    目录 添加数据到二维数组并显示 读取二维数组 添加数据到二维数组并显示 <li v-for="(item, index) in studentlist" :key="index"> {{item.stu_name}}--{{item.stu_score}} </li> <td> <tr> <span id="student_name">学生姓名</span> <inpu

  • vue如何实时往数组里追加数据

    目录 实时往数组里追加数据 数组追加合并与对象追加合并 实时往数组里追加数据 使用Vue.set() 以下来解读一下 Vue.set(this.tableDatas, this.selected, obj) 1.this.tableDatas是我们声明好的数组,以下是自定义数据 tableDatas: [{     id: 1,     caseName: '方案一',     longMinute: 10,     longSecond: 0,     remindMinute: 2,   

  • 编写Vue项目,如何给数组的第一位添加对象数据

    目录 Vue给数组第一位添加对象数据 给数组添加新对象并赋值 Vue给数组第一位添加对象数据 核心代码如下:      this.menuBar.unshift({           title:"全部",           id:13         }) 全部代码如下:     data(){         return {            menuBar:[             {               title:"家具生活",    

  • vue 数组添加数据方式

    目录 vue 数组添加数据 数据添加分为三种方法 动态向数组中添加对象(关于v-for,input和push) 核心:深拷贝 vue 数组添加数据 数据添加分为三种方法 1.unshift() 2.push() 3.splice() <template>       <div>         <ul>           <li v-for="(time,index) of listTable" :key="index"

  • Java动态数组添加数据的方法与应用示例

    本文实例讲述了Java动态数组添加数据的方法与应用.分享给大家供大家参考,具体如下: 输入客户的姓名,客户的人数不定.待输入完成后,请打印出客户的名单,并定义一个方法查询客户是否在这些客户中. 代码示例: package com.jredu.ch06.exer; import java.util.Arrays; import java.util.Scanner; public class CustomBiz { public String[] custom; public void addNam

  • 详解将数据从Laravel传送到vue的四种方式

    在过去的两三年里,我一直在研究同时使用 Vue 和 Laravel 的项目,在每个项目开发的开始阶段,我必须问自己 "我将如何将数据从 Laravel 传递到 Vue ?".这适用于 Vue 前端组件与 Blade 模板紧密耦合的两个应用程序,以及运行完全独立于 Laravel 后端的单页应用程序. 这里有四种不同的方法从一个到另一个获取数据. 直接回显到数据对象或组件属性中 赞成: 简单明了 反对: 必须与嵌入到 Blade 模板中的 Vue 应用程序一起使用 可以说是将数据从 La

  • Vue组件间数据传递的方式(3种)

    vue中传递数据的方式有哪些 数据流的方式传递数据 通过 props 传递属性 父级给demo2组件绑定一个msg数据 父组件 <template> <div class='container'> <demo2 :msg="msg" @change="change" /> </div> </template> <script> import demo2 from './demo2' export

  • vue简单的二维数组循环嵌套方式

    目录 二维数组循环嵌套方式 vue循环数组.循环嵌套数组v-for 利用Vue循环输出标签 前端页面输出循环嵌套数组 二维数组循环嵌套方式 <div class="box">   <div class="color">      <div>蓝色/尺码</div>   </div>   //这是简单的布局 .box{     border: 1px solid red;     display: flex;

  • Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)

    当我们在书写 vue 组件的时候,也许可能会用到数据传递:将父组件的数据传递给子组件,有时候也需要通过子组件去事件去触发父组件的事件: 每当我们遇到这样的需求的时候,我们总是会想到有三种解决办法: 通过 props 的方式向子组件传递(父子组件) vuex 进行状态管理(父子组件和非父子组件) vuex 非父子组件的通信传递 Vue Event Bus ,使用Vue的实例,实现事件的监听和发布,实现组件之间的传递. 后来再逛社区的时候我又发现了还有第四种传递方式, inheritAttrs +

  • Vue 数组和对象更新,但是页面没有刷新的解决方式

    在使用数组的时候,数组内部数据发生改变,但是与数组绑定的页面的数据却没有发生变化. <ul> <li v-for="(item,index) in todos" :key="index">{{item.name}}</li> </ul> data () { return { msg: 'Welcome to Your Vue.js App', todos: [{ name: 'aa', age: 14 }, { nam

  • vue 绑定对象,数组之数据无法动态渲染案例详解

    项目场景: 黑马vue项目管理实战,获取商品分类,展开栏的标签页中修改修改数据属性 问题描述: 在本该点击+new tag这个标签页时弹出一个input框让用户输入需要添加的属性 结果点击时却不能立马渲染 async getParametersList() { this.cat_id = this.currentSelect[this.currentSelect.length - 1]; const { data: res } = await this.$http.get( `categorie

  • vue动态添加store、路由和国际化配置方式

    目录 vue动态添加store,路由和国际化 vue动态添加store vue动态添加路由 vue动态加载国际化 前端项目中用vue-i18n实现国际化 在项目中安装国际化包的依赖 配置文件 异步方式引入,一次只加载一种国际化包 非异步步方式,每次加载所有的包 使用 切语言 vue动态添加store,路由和国际化 vue动态添加store 想写组件库?用这个吧 … // store module标准格式 import demo from '@/store/modules/demo' $store

随机推荐