精华内容
下载资源
问答
  • 动态添加的
    千次阅读
    2022-03-30 17:48:30

    https://www.jianshu.com/p/06c9c6685108

    更多相关内容
  • android 程序中动态添加删除控件或布局,设置大小,位置
  • WPF动态添加行列DATAGRID

    热门讨论 2013-04-28 10:28:56
    WPF DataGrid 动态添加 行列 比较靠谱的,可以看看,通俗易懂
  • js动态添加meta标签

    千次阅读 2022-01-13 15:16:43
    有时候我们需要动态添加meta标签和里面的内容,如何添加呢? 举例: // 手动添加mate标签 const addMeta = (name, content) => { const meta = document.createElement('meta'); meta.content = ...

    有时候我们需要动态添加meta标签和里面的内容,如何添加呢?
     

    举例:

     

      // 手动添加mate标签
      const addMeta = (name, content) => {
        const meta = document.createElement('meta');
        meta.content = content;
        meta.name = name;
        document.getElementsByTagName('head')[0].appendChild(meta);
      };
    
      addMeta(
          'viewport',
          'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover',
        );

    以上通过创建meta标签,绑定到head标签内。

    展开全文
  • Android RadioGroup动态添加RadioButton

    千次阅读 2021-12-02 08:41:11
    就要涉及到要动态添加RadioButton ,代码生成RadioButton 的方法 1, 动态添加RadioButton; <RadioGroup android:id="@+id/custom_group" android:layout_width="100dp" android:layout_height="wrap_content"&...

    在开发app项目中,有时候不想用系统原生的RadioButton 或者当RadioButton的个数不知道有多少个时,这时候
    就要涉及到要动态添加RadioButton ,代码生成RadioButton 的方法

    1, 动态添加RadioButton;

    <RadioGroup
        android:id="@+id/custom_group"
        android:layout_width="100dp"
        android:layout_height="wrap_content">
    
    </RadioGroup>
    

    2.acitivity中往RadioGroup添加RadioButton

    RadioGroup mRadioGroup = findViewById(R.id.custom_group
    展开全文
  • Vue+Element一步步实现动态添加Input_输入框

    千次阅读 多人点赞 2021-11-09 08:27:49
    根据,老粉最近做的一些关于动态添加Input的需求,在这里总结几种用Vue+Element动态添加Input_输入框实现方案、解决单选转换多选无法清除数据、多数据渲染下拉框卡顿问题

    目录

    输入式动态添加

    单选式动态添加

    组合式动态添加

    组合式动态添加(回传名称)

    单选、多选组合式

    数据回显

    完整示例

    总结

    单选切换多选(补充)

    下拉框渲染卡顿问题(补充)

    双循环遍历优化


    输入式动态添加

    输入式:即input的值由用户输入;例如:通过自定义用户标签,给用户动态添加多个标签。

    <template>
    <div class="app">
      <div v-for="item in table" :key="item.id">
        <el-input v-model="item.label" class="el-input"></el-input>
      </div>
     <el-button @click="addInput">添加</el-button>
     <el-button @click="search">查看</el-button>
    </div>
    </template>
    
    <script>
      export default {
         data () {
        return {
          table: [
            { id: '12121', label: '' }
          ]
        }
      },
      methods: {
        // 动态添加
        addInput () {
          this.table.push({ id: Date.now(), label: '' })
        },
        // 查看
        search () {
          console.log(this.table)
        },
      }
      }
    </script>

    单选式动态添加

    例如:给一名老师动态添加多个监考科目,后台接收科目代码(courseId)。

     

    <div v-for="(item,index) in list" :key="item.id">
        <el-select
          class="el-select"
          v-model="item.courseId"
          placeholder="请选择"
          @change="changeSelect($event,index)">
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
    </div>
    
    
          list: [
            { courseId: '', id: '1' }
          ],
          options: [
            { value: '123', label: '英语' },
            { value: '456', label: '数学' },
            { value: '868', label: '语文' },
            { value: '672', label: '化学' },
            { value: '684', label: '物理' }
          ],
        // 动态添加
        addInput () {
          this.list.push({ id: Date.now(), courseId: '' })
        },

    组合式动态添加

    例如:给学生各个科目打上分数。

     <div v-for="item in list1" :key="item.id">
        <el-select
          class="el-select"
          v-model="item.courseId"
          placeholder="请选择科目"   
         >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <el-input v-model="item.grade" class="el-input" placeholder="请填写分数"></el-input>
      </div>
          list1: [
            { courseId: '', id: '1', grade: '' }
          ],
         options: [
            { value: '123', label: '英语' },
            { value: '456', label: '数学' },
            { value: '868', label: '语文' },
            { value: '672', label: '化学' },
            { value: '684', label: '物理' }
          ],
    
        addInput () {
          this.list1.push({ id: Date.now(), courseId: '', grade: '' })
        },        
    
          // this.list1
          // [
          //   {
          //     "courseId":"123",
          //     "id":"1",
          //     "grade":"96"
          //   },
          //   {
          //     "id":1636423648221,
          //     "courseId":"456",
          //     "grade":"100"
          //   }
          // ]

    组合式动态添加(回传名称)

    例如:给学生各个科目打上分数,后端需要同时接收科目名称和科目id。

    // 后台接收的数据
    courseList:[
        {courseId: '', grade: '', courseName: '' }
        {courseId: '', grade: '', courseName: '' }
    ]

    这时候,只需要给el-select添加change事件,在获取id的同时获取到名称即可。

    <div v-for="(item,index) in list2" :key="item.id">
        <el-select
          class="el-select"
          v-model="item.courseId"
          placeholder="请选择科目"
          @change="changeOneCourse($event,index)"
         >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <el-input v-model="item.grade" class="el-input" placeholder="请填写分数"></el-input>
      </div>
     changeOneCourse(val, index) {
          this.options.find((item) => {
            if (item.value === val) {
              this.list2[index]['courseName'] = item.label // 根据绑定值id获取到名称label
            }
          })
        }
          // this.list2: [
          // {
          //   "courseId":"123",
          //   "id":"1",
          //   "grade":"96",
          //   "courseName":"英语"
          // }
          // ]

    单选、多选组合式

    例如:给各个年级添加不同科目,后端需要同时接收【科目名称,科目id】,【年级id,年级名称】。

     gradeList:[
            { courseList: [
              { courseId: '', courseName: '' },
              { courseId: '', courseName: '' }
            ],
            gradeData: { grade: '', gradeName: ' ' }
            }
          ]
    <div v-for="(item,index) in list3" :key="item.id">
      <el-select v-model="item.gradeList" placeholder="请选择年级" @change="changeGrad($event,index)">
        <el-option
          v-for="item in options1"
          :key="item.value"
          :label="item.label"
          :value="item.value">
        </el-option>
      </el-select>
      <el-select v-model="item.courseList" multiple placeholder="请选择科目" @change="changeSelect($event,index)">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value">
      </el-option>
      </el-select>
    </div>
     <el-button @click="addInput">添加</el-button>
     <el-button @click="search">查看</el-button>
          list3: [
             { gradeList: '', id: '1', courseList: '' }
          ],
          options: [
            { value: '123', label: '英语' },
            { value: '456', label: '数学' },
            { value: '868', label: '语文' },
            { value: '672', label: '化学' },
            { value: '684', label: '物理' }
          ],
          options1: [
            { value: '1238635', label: '一年级' },
            { value: '4568635', label: '二年级' },
            { value: '8688635', label: '三年级' },
            { value: '6728635', label: '八年级' },
            { value: '6848635', label: '九年级' }
          ],
          courseList: [], // 存放多选
          grade: [], // 存放单选
          name: [],
      methods: {
        addInput () {
          this.list3.push({ id: Date.now(), gradeList: '', courseList: '' })
        },
        search () {
          let arr3 = []
          for (let i = 0; i < this.courseList.length; i++) {
            arr3.push(Object.assign(this.courseList[i] || {}, this.grade[i] || {})) // 合并数组对象
          }
          console.log(arr3) // 输出传给后台的结构
        },
        // 处理多选的值
        changeSelect (val, index) {
          let courseList = { courseList: [] }
          this.name = []
          this.courseList[index] = courseList // 初始化第一个值
          // =====================根据变化的值赋值,有就赋值,无就删除===========================
          for (let i = 0; i <= val.length - 1; i++) {
            this.options.find((item) => {
              if (item.value === val[i]) {
                this.name.push(item.label) // 根据绑定值id获取到名称label
              }
            })
          }
          // =====================进行赋值===========================
          for (let i = 0; i <= val.length - 1; i++) {
            let obj = {}
            obj['courseId'] = val[i]
            obj['courseName'] = this.name[i]
            this.courseList[index]['courseList'].push(obj)
          }
          console.log(this.courseList) // 相当于多选课程的数据
        },
        changeGrad (val, index) {
          this.options1.find((item) => {
            if (item.value === val) {
              this.list2[index]['gradeName'] = item.label // 根据绑定值id获取到名称label
            }
          })
          let grade = { grade: { gradeName: '', gradeId: '' } }
          //
          let gradeName = ''
          this.grade[index] = grade // 初始化第一个值
          this.options1.find((item) => {
            if (item.value === val) {
              gradeName = item.label // 根据绑定值id获取到名称label
            }
          })
          // =====================进行赋值===========================
          this.grade[index]['grade']['gradeName'] = gradeName
          this.grade[index]['grade']['gradeId'] = val
          console.log(this.grade) // 相当于单选年级的数据
        }
      }

    数据回显

    动态添加数据之后,数据也正常提交给了后台,往往数据可能还需要编辑或修改,那就会涉及到数据的回显问题。

    // 定义一个test方法,和echoData查看回显的数据是否正确
     // 数据回显
        echoData () {
          this.isChange = false
          this.arr3 = this.echoList // arr3提到data中全局保存
          let courseList = [] // 保存多选的值
          let obj = {}
          // 回显时初始化单选值(年级)
          this.grade = this.echoList.map(item => {
            return { grade: { ...item.grade } }
          })
          // 回显时初始化多选值(课程)
          for (let key in this.echoList) {
            let obj = {}
            obj['courseList'] = this.echoList[key]['courseList']
            this.courseList.push(obj)
          }
          // 1.拆分后台数据,构造年级回显
          this.options1 = this.echoList.map(item => {
            item.courseList.forEach(val => {
              courseList.push(val)
            })
            return {
              value: item.grade['id'],
              label: item.grade['gradeName']
            }
          })
          // 数组对象去重
          courseList = courseList.reduce((a, b) => {
            obj[b.id] ? '' : obj[b.id] = true && a.push(b)
            return a
          }, [])
          // 2.拆分后台数据,构造科目回显
          this.options = courseList.map(item => {
            return {
              value: item.id,
              label: item.courseName
            }
          })
          // 3.拆分后台数据,构造动态绑定的数据回显
          this.list3 = this.echoList.map(item => {
            let course = []
            item.courseList.forEach(val => {
              course.push(val.id)
            })
            return {
              gradeList: item.grade['id'],
              courseList: course
            }
          })
          console.log(this.arr3)
        },
       // 用于检查回显数据的赋值是否正确
        test () {
          this.courseList = []
          this.grade = []
          // 回显时初始化单选值(年级)
          this.grade = this.echoList.map(item => {
            return { grade: { ...item.grade } }
          })
          // 回显时初始化多选值(课程)
          for (let key in this.echoList) {
            let obj = {}
            obj['courseList'] = this.echoList[key]['courseList']
            this.courseList.push(obj)
          }
          console.log(this.grade)
          console.log(this.courseList)
        }

    完整示例

    这里暂时不对代码进行优化处理。

    <template>
    <div class="app">
      <!--// 输入式-->
      <!--<div v-for="item in table" :key="item.id">-->
        <!--<el-input v-model="item.label" class="el-input"></el-input>-->
      <!--</div>-->
      <!--单选式-->
    <!--  <div v-for="item in list" :key="item.id">
      <el-select
        class="el-select"
        v-model="item.courseId"
        placeholder="请选择">
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value">
        </el-option>
      </el-select>
      <el-input v-model="item.grade" class="el-input"></el-input>
    </div>-->
      <!--组合式-->
    <!--  <div v-for="item in list2" :key="item.id">
        <el-select
          class="el-select"
          v-model="item.courseId"
          placeholder="请选择科目"
         >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <el-input v-model="item.grade" class="el-input" placeholder="请填写分数"></el-input>
      </div>-->
      <!--组合式(回显名称)-->
    <!--  <div v-for="(item,index) in list2" :key="item.id">
        <el-select
          class="el-select"
          v-model="item.courseId"
          placeholder="请选择科目"
          @change="changeOneCourse($event,index)"
        >
          <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
          </el-option>
        </el-select>
        <el-input v-model="item.grade" class="el-input" placeholder="请填写分数"></el-input>
      </div>-->
      <!--单选、多选组合式-->
    <div v-for="(item,index) in list3" :key="item.id">
      <el-select v-model="item.gradeList" placeholder="请选择年级" @change="changeGrad($event,index)">
        <el-option
          v-for="item in options1"
          :key="item.value"
          :label="item.label"
          :value="item.value">
        </el-option>
      </el-select>
      <el-select v-model="item.courseList" multiple placeholder="请选择科目" @change="changeSelect($event,index)">
      <el-option
        v-for="item in options"
        :key="item.value"
        :label="item.label"
        :value="item.value">
      </el-option>
      </el-select>
    </div>
     <el-button @click="addInput">添加</el-button>
     <el-button @click="search">查看</el-button>
     <el-button @click="echoData">回显</el-button>
     <el-button @click="test">测试</el-button>
    </div>
    </template>
    
    <script>
    
    export default {
      name: 'teacher',
      data () {
        return {
          value1: [],
          table: [
            { id: '12121', label: '' }
          ],
          list: [
            { courseId: '', id: '1' }
          ],
          list1: [
            { courseId: '', id: '1', grade: '' }
          ],
          list2: [
            { courseId: '', id: '1', grade: '', courseName: '' }
          ],
          list3: [
            { gradeList: '', id: '1', courseList: '' }
          ],
          options: [
            { value: '123', label: '英语' },
            { value: '456', label: '数学' },
            { value: '868', label: '语文' },
            { value: '672', label: '化学' },
            { value: '684', label: '物理' }
          ],
          options1: [
            { value: '1238635', label: '一年级' },
            { value: '4568635', label: '二年级' },
            { value: '8688635', label: '三年级' },
            { value: '6728635', label: '八年级' },
            { value: '6848635', label: '九年级' }
          ],
          courseList: [], // 存放多选
          grade: [], // 存放单选
          name: [],
          gradeList: [], // 分数列表
          echoList: [
            {
              'id': '55cca14cad60430191c0c3840a63b50c',
              'grade': {
                'id': 'd3d16e7edcbb4c1fb09759725c956dd4',
                'gradeName': '二年级'
              },
              'courseList': [
                {
                  'id': '1455377986034917378',
                  'courseName': '地理'
                },
                {
                  'id': '1455377934050713601',
                  'courseName': '数学'
                }
              ]
            },
            {
              'id': '55cca14cad60430191c0c3840a63b50c',
              'grade': {
                'id': 'fe3c385ab7c745a692f2c4b32c0cb2a0',
                'gradeName': '八年级'
              },
              'courseList': [
                {
                  'id': '1455377934050713601',
                  'courseName': '数学'
                },
                {
                  'id': '1455377958553837569',
                  'courseName': '历史'
                }
              ]
            }
          ],
          isChange: false,
          arr3: []
        }
      },
      methods: {
        addInput () {
          this.table.push({ id: Date.now(), label: '' })
          this.list.push({ id: Date.now(), courseId: '' })
          this.list1.push({ id: Date.now(), courseId: '', grade: '' })
          this.list2.push({ id: Date.now(), courseId: '', grade: '', courseName: '' })
          this.list3.push({ id: Date.now(), gradeList: '', courseList: '' })
        },
        search () {
          // 根据isChange判断数据是否发生变化,如果没发生变化arr3则为后台返回的数据,说明页面未发生变化
          if (this.isChange) {
            this.arr3 = []
            for (let i = 0; i < this.courseList.length; i++) {
              this.arr3.push(Object.assign(this.courseList[i] || {}, this.grade[i] || {})) // 合并数组对象
            }
          }
    
          console.log(this.arr3) // 输出传给后台的结构
        },
        // 处理多选的值
        changeSelect (val, index) {
          this.isChange = true
          let courseList = { courseList: [] }
          this.name = []
          this.courseList[index] = courseList // 初始化第一个值
          // =====================根据变化的值赋值,有就赋值,无就删除===========================
          for (let i = 0; i <= val.length - 1; i++) {
            this.options.find((item) => {
              if (item.value === val[i]) {
                this.name.push(item.label) // 根据绑定值id获取到名称label
              }
            })
          }
          // =====================进行赋值===========================
          for (let i = 0; i <= val.length - 1; i++) {
            let obj = {}
            obj['courseId'] = val[i]
            obj['courseName'] = this.name[i]
            this.courseList[index]['courseList'].push(obj)
          }
          console.log(this.courseList) // 相当于多选课程的数据
        },
        // 处理单选的值
        // changeOneCourse (val, index) {
        //   this.options.find((item) => {
        //     if (item.value === val) {
        //       this.list2[index]['courseName'] = item.label // 根据绑定值id获取到名称label
        //     }
        //   })
        // },
        changeGrad (val, index) {
          this.isChange = true
          // this.options1.find((item) => {
          //   if (item.value === val) {
          //     this.list2[index]['gradeName'] = item.label // 根据绑定值id获取到名称label
          //   }
          // })
          let grade = { grade: { gradeName: '', gradeId: '' } }
          let gradeName = ''
          this.grade[index] = grade // 初始化第一个值
          this.options1.find((item) => {
            if (item.value === val) {
              gradeName = item.label // 根据绑定值id获取到名称label
            }
          })
          // =====================进行赋值===========================
          this.grade[index]['grade']['gradeName'] = gradeName
          this.grade[index]['grade']['gradeId'] = val
          console.log(this.grade) // 相当于单选年级的数据
        },
        // 数据回显
        echoData () {
          this.isChange = false
          this.arr3 = this.echoList // arr3提到data中全局保存
          let courseList = [] // 保存多选的值
          let obj = {}
          // 回显时初始化单选值(年级)
          this.grade = this.echoList.map(item => {
            return { grade: { ...item.grade } }
          })
          // 回显时初始化多选值(课程)
          for (let key in this.echoList) {
            let obj = {}
            obj['courseList'] = this.echoList[key]['courseList']
            this.courseList.push(obj)
          }
          // 1.拆分后台数据,构造年级回显
          this.options1 = this.echoList.map(item => {
            item.courseList.forEach(val => {
              courseList.push(val)
            })
            return {
              value: item.grade['id'],
              label: item.grade['gradeName']
            }
          })
          // 数组对象去重
          courseList = courseList.reduce((a, b) => {
            obj[b.id] ? '' : obj[b.id] = true && a.push(b)
            return a
          }, [])
          // 2.拆分后台数据,构造科目回显
          this.options = courseList.map(item => {
            return {
              value: item.id,
              label: item.courseName
            }
          })
          // 3.拆分后台数据,构造动态绑定的数据回显
          this.list3 = this.echoList.map(item => {
            let course = []
            item.courseList.forEach(val => {
              course.push(val.id)
            })
            return {
              gradeList: item.grade['id'],
              courseList: course
            }
          })
          console.log(this.arr3)
        },
        test () {
          this.courseList = []
          this.grade = []
          // 回显时初始化单选值(年级)
          this.grade = this.echoList.map(item => {
            return { grade: { ...item.grade } }
          })
          // 回显时初始化多选值(课程)
          for (let key in this.echoList) {
            let obj = {}
            obj['courseList'] = this.echoList[key]['courseList']
            this.courseList.push(obj)
          }
          console.log(this.grade)
          console.log(this.courseList)
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
      .app{
        margin: 50px auto;
        width: 500px;
      }
    .el-input{
      margin-bottom: 20px;
      width: 200px;
    }
      .el-select{
        margin-bottom: 20px;
        margin-right: 10px;
      }
    </style>
    

    总结

     1、动态添加Input,需要密切关注页面和后台数据的处理,简单的直接绑定v-for的item,复杂的需要根据具体需求,进行调整;

    2、获取id的同时利用find()获取名称;

    3、纯数组合与数组对象之间的转换、合并,利用循环合自定义obj={}保存对象,并循环输出;

    4、数组对象的合并,利用Object.assign(),先合并对象;

    5、同时获取名称和id需要在change方法里面,同时进行,根据有值就添加,无值就删除原理;

    6、数据回显,要保证数据跟动态添加时的绑定值一致 。

    单选切换多选(补充)

    当输入框根据条件,既可以单选,又可以多选时,会出现切换模式时,无法清除数据的问题。

     <div class="select">
          <el-select v-model="grade" placeholder="请选择年级" clearable @change="changeGrade">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"/>
          </el-select>
          <el-select v-if="isShowSelect" v-model="course" placeholder="请选择课程" clearable :multiple="isMultiple === '1'">
            <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value"
            />
          </el-select>
    
    <script>
        data () {
        return {
          isMultiple: '0',
          isShowSelect: true,
          isShow: false,
          course: '',
          grade: '',
          options: [
            { value: '1238635', label: '一年级', isMultiple: '0' },
            { value: '4568635', label: '二年级', isMultiple: '0' },
            { value: '8688635', label: '三年级', isMultiple: '1' },
            { value: '6728635', label: '八年级', isMultiple: '1' },
            { value: '6848635', label: '九年级', isMultiple: '1' }
          ],
          options1: [
            { value: '123', label: '英语' },
            { value: '456', label: '数学' },
            { value: '868', label: '语文' },
            { value: '672', label: '化学' },
            { value: '684', label: '物理' }
          ]
        }
      },
     methods: {
          if (val) {
            // 改变年级时,判断是否可多选
            this.isMultiple = this.options.find(item => item.value === val).isMultiple
           // 多选时,绑定的是数组,单选绑定的是字符串,出现问题的地方可能是这里
            this.isMultiple === '1' ? this.course = [] : this.course = ''
          }
    }
    </script> 

      

    可能是切换模式时,需要重新 v-model,但容器又没有重新渲染导致,因此可以在切换的时候,让容器重新渲染,重新 v-model ,首先给选择课程添加 v-if,,然后观察 isMultiple 的变化,变化时,让课程容器重新渲染即可。

     watch: {
        isMultiple (val) {
          if (val) {
            this.isShowSelect = false
            setTimeout(() => {
              this.isShowSelect = true
            })
          }
        }
      },

    下拉框渲染卡顿问题(补充)

    当渲染的数据量很大时,一次性渲染,会造成页面卡顿,甚至内存溢出现象,一次性渲染超过2000条数据的下拉框,就会出现卡顿现象(小编自测的结果,不一定准确)。解决的方法是:分页,同时支持搜索,那就可以使用 Element 的 Cascader 级联选择器。

              <el-cascader
                filterable
                ref="cascader"
                :options="options"
                :key="dialogData.pushType"
                :disabled="!(dialogData.pushType)"
                :props="optionsProps"
                :placeholder="optionsValue.length>0?optionsValue.map(item=>{return item.label}).join(','):placeholder"
                :show-all-levels="false"
                @change="changeOptionValue"
                v-model="optionsValue"
                size="mini">
              </el-cascader>
    
            <el-pagination
              v-if="managersTotal > 1000 && dialogData.pushType === '03'"
              @current-change="managersCurrentChange"
              :page-size="1000"
              layout="total, prev, pager, next"
              :total="managersTotal">
            </el-pagination>

     

     既然多数据,那必然需要支持多选。

    分页下的多选,在点击下一页的时候,会把上一页选择的数据清空,怎么办呢?

    那就把在上页中选择的数据,保存起来,在下一页中,加入渲染中去即可。

     // @change 中保存选择的数据 
     changeOptionValue (val) {
          this.saveOptionsValue = val; // 保存选择的数据 
      },
    
     // 在点击下一页时,把上一页选择的数据 push 到渲染中去
     managersCurrentChange (val) {
          const hash = {};
         // 每次点击时,把重复数据过滤掉,不然点击一次,就会 push 一次重复数据
          this.pushOptionsList = this.saveOptionsValue.reduce(function (prev, cur) {
            !hash[cur.value] ? hash[cur.value] = prev.push({ label: cur.label, value: { value: cur.value, label: cur.label } }) : '';
            return prev;
          }, []);
          this.optionsValue = this.saveOptionsValue;
          this.managersPageNo = val;
          this.renderData(); // 接口调用,渲染数据
        },
    renderData(){
     .......
     // 把上一页选择的数据,加到数组最前面
      this.pushOptionsList.length !== 0 && this.List.unshift(...this.pushOptionsList);
    }

     最后,在数据渲染时,要给一个渲染中的提示,最好是全局的,同时禁止用户其他的操作。毕竟数据量多,渲染需要一定的时间,这段时间不能被其他操作影响。

     openFullScreen2() {
            const loading = this.$loading({
              lock: true,
              text: 'Loading',
              spinner: 'el-icon-loading',
              background: 'rgba(0, 0, 0, 0.7)'
            });
            setTimeout(() => {
              loading.close();
            }, 2000);
          }

    当然分页是不太符合页面操作逻辑的,数据多的时候,应该满足模糊搜索,而不是一页页去查,再进行搜索。 查这一步,明显多余,那一步到位的做法是什么呢?element的Select选择器就给我们提供了,远程搜索的功能

    <el-select
      :size="isType? 'medium':'mini'"
      v-model="optionsValue"
      multiple
      filterable
      remote
      reserve-keyword
      placeholder="请输入姓名进行搜索"
      :remote-method="remoteMethod"
      loading-text="搜索中..."
      :loading="loading">
    <el-option
      v-for="item in options"
      :key="item.value"
      :label="item.label"
      :value="item.value">
    </el-option>
    </el-select>
    
    <script>
     // 远程搜索
        remoteMethod (query) {
          if (query !== '') {
            setTimeout(() => {
             // 调用接口,模糊查询
            }, 200);
          } else {
            this.managersList = [];
          }
        },
    </script>

     注意:当el-select开启多选的时候,size最好是medium以上,不然,有时候会发生页面抖动现象

    双循环遍历优化

    在拆分后台数据,构造年级回显时,用到了下面所示代码

    可以看到使用map()和forEach循环遍历数据,这里双循环的时间复杂度为O(n²),当数据量大的时候,太消耗性能了,因此需要优化一下,

    // 1.拆分后台数据,构造年级回显
          this.options1 = this.echoList.map(item => {
            item.courseList.forEach(val => {
              courseList.push(val)
            })
            return {
              value: item.grade['id'],
              label: item.grade['gradeName']
            }
          })
    
    // 优化代码,拆分双层遍历,降低时间复杂度,O(n)
     this.echoList.map(item => {return item.courseList}).forEach(val =>{
            courseList.push(...val)
        })
        this.options1 =  echoList.map(item =>{
                return {
                        value: item.grade['id'],
                        label: item.grade['gradeName']
                    }
        })

    【Vue-Vant】Checkbox复选框--案例分析多选和全选是复选框中的基本组成部分,复选框用于在选中和非选中状态之间进行切换。在很日常场景中都是很常见的,这里是个小案例,记录平时复选框的运用https://blog.csdn.net/weixin_45785873/article/details/112984637

    展开全文
  • vue动态添加表单

    千次阅读 热门讨论 2022-03-25 16:30:17
    日常开发中,动态添加表单的场景还是蛮多的,可能第一次听到动态添加表单的同学会有一点懵,但其实实现起来还是很简单的,下面一起来看看吧。 实现思路 当我们点击 “新增车辆信息” 按钮时,通过一个标识判断表单...
  • Android addview—动态添加view

    千次阅读 2022-02-14 10:34:02
    在日常的开发中经常遇到需要动态添加子view的情况,addview是ViewGroup的特有方法,可以在布局中动态添加view,而view是不存在这个方法的。 二、使用方式 1.方法介绍 addview有以下几种方式 addView(View child) // ...
  • javaScript动态添加Li元素

    千次阅读 2021-06-13 10:41:26
    本文主要为大家分享一篇javaScript动态添加Li元素的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。html代码块**javaScript动态添加Li元素**ul li{list-style:none;...
  • vue3动态添加路由

    千次阅读 2022-06-17 15:47:52
    有的时候我们需要根据不同的用户身份生成不同的路由规则,例如:初始化vite + vue + ts项目,引入vue-router。...可以了解到,动态添加路由就是使用了router对象的addRoute方法。有时候可能是添加嵌套
  • js动态添加style样式

    千次阅读 2021-12-14 16:56:20
    var style = document.createElement('style') style.type = 'text/css' style.appendChild(document.createTextNode('input[type="checkbox"]:checked {\n' + ' /* background-position: -48px 0;...
  • java实体类动态添加属性

    千次阅读 2022-03-17 14:49:02
    java实体类动态添加属性 可以给已有实体类动态的添加字段并返回新的实体对象,不影响原来的实体对象结构。 添加依赖 > >cglib> >cglib> >2.2.2> > > >commons-beanutils> >commons-beanutils> >1.9.4> > 代码 import...
  • Android 根据后台数据动态添加view

    千次阅读 2021-11-16 15:44:27
    首先在activity的布局文件中添加一个LinearLayout装需要动态添加的view: activity_main.xml <LinearLayout android:id="@+id/ll_bottom" android:layout_width="match_parent" android:layout_height=...
  • Vue 动态添加输入框

    千次阅读 2021-12-30 16:58:13
    效果图: 代码: <template>...el-dialog title="动态添加女朋友" :visible.sync="dialogVisible" width="40%"> <div class="query-detail"> <el-form ref="ruleForm" label-width="150p
  • Android动态添加布局的两种方式

    千次阅读 2022-04-18 10:52:43
    动态添加布局的两种方式 动态添加xml布局 另外写一个xml布局,然后通过java的方式让他加载他主布局上 动态添加java布局 通过java写出一个布局,然后再通过java的方式让他加载他主布局上 1、动态添加xml...
  • 如何在Vue中动态添加类名

    万次阅读 2020-02-03 08:00:00
    作者:Michael Thiessen译者:前端小智来源:forum.vuejs.org/能够向组件添加动态类名是非常强大的功能。它使我们可以更轻松地编写自定义主题,根据组件的状态添加类...
  • JS给table动态添加行和列

    千次阅读 2022-02-22 13:20:36
    input为动态添加 <botton onclick="AddTableCell()">添加一列</botton> <table id="tableWeight"> <thead> <tr> <th>员工号</th> <th>姓名</th&...
  • React 动态添加路由

    千次阅读 2021-12-22 09:58:21
    react动态渲染菜单及路由
  • js动态添加样式和jQuery动态添加样式

    千次阅读 2020-11-30 15:17:47
    1、js动态添加样式 1、添加样式:DOM对象.className = '类名 类名' //给class属性添加类;若添加多个类名,空格隔开 2、删除样式:DOM对象.className = '' //清空class属性里面的类 2、H5方式添加样式 1、添加类名...
  • 通过addroutes动态添加路由

    千次阅读 2022-03-13 16:36:33
    说明:addroutes是用来动态添加路由的,在做权限管理的时候会用到这个api,接下来我们一起来探究一下这个api吧。 一.通过脚手架生成的页面3 1.index.js import Vue from 'vue' import VueRouter from 'vue-router...
  • vue动态添加表单数据至表格中

    千次阅读 2022-04-14 08:45:54
    vue动态添加表单数据至表格中 <div> <el-card> <div slot="header" class="tm"> <span>报废信息</span> </div> <!-- 表单 --> <!-- 时间设置 -->
  • Vue 页面动态添加标签

    千次阅读 2022-05-13 21:42:43
    Vue 页面动态添加标签demo <template> <div class=""> <button @click="createNode"> 增加条件 </button> <div v-for="(v, i) in addRankData" v-bind:key="i"> {{ v }} <...
  • vue动态添加组件

    千次阅读 2021-09-28 22:50:46
    我不可能在这个列表页把所有的组件都import进来,所以在弹窗显示的时候scope.row获取当前记录的信息,然后根据信息中的对应关键字段(如下面我代码中的programe_id)就是组件唯一的文件名,拼接一下就能动态添加组件...
  • vue页面动态添加元素

    千次阅读 2020-12-19 21:52:40
    vue页面动态添加元素发布时间:2018-09-20 11:54,浏览次数:3572, 标签:vue<>1.动态插入组件将需要插入到页面的元素定义成一个组件,再进行操作。参考:https://jintang.github.io/2018/03/27/vue动态添加...
  • 一个新的需求,需要动态添加选择条件,虽然可以实现了,但是在校验提示部分感觉欠佳,直接通过$message 的方式提示不够友好,最后通过网上示例完善校验,对部分几个点做个人总结。 实现思路: 1.由于vue是通过数据...
  • elementUI动态添加表单项并添加验证

    万次阅读 2019-08-23 17:48:29
    elementUI动态添加表单项并添加验证 在使用elementUI动态添加表单项并添加验证的时候踩了一些坑,在此记录一下 首先效果图: 代码: <el-form :label-position="labelPosition" :ref="form" :model="form" label-...
  • 在Hyperledger Fabric组织的动态添加和删除中,我们已经完成了在运行着的网络中动态添加和删除组织。本文将在其基础上,详细介绍了如何在 soft 组织上添加新的 peer2 节点,并在简要概述了删除节点的方法,本实验...
  • 需求:点击加号,自动添加项目2,如图 核心代码 addIv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { View view = LayoutInflater.from(SendDemandLLActivity.this...
  • vue动态添加事件+动态触发事件方法

    千次阅读 2022-01-29 14:54:20
    {{n.name}} l用于动态触发不同js事件,或者同一事件动态触发不同方法
  • Vue动态添加样式的方法

    千次阅读 2021-12-15 14:29:58
    一、动态添加class的方法 根据数据长度判断是否展示类名 <div :class="item.length > 3?'active':''></div> 定义data,添加class及style <div :class="styleList[item.xxx].hovers" :style=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,514,449
精华内容 605,779
关键字:

动态添加的