网上查过很多相关文章都没有一章是写element ui滑块带范围实现双向绑定 二个滑块二头的数据怎么得到 我的需求是做个时间轴要滑动选择不同的时间 开始很难做最后一点一点摸索得出的结论 好在写出来了先给大家看实体图

就是这样的 给大家贴代码 多余的代码我就不贴了 就给你们看主要的

 <div>
<el-dialog
title="聊天记录"
:visible.sync="showFlag"
width="850px"
@close="closeDialog"
center
>
<div>
<div class="block">
<el-slider
v-model="value"
range
:marks="marks"
:max="300"
:step="1"
@change="schedule()"
style="margin-bottom:10px;"
:format-tooltip="formatTooltip"
>
</el-slider>
</div>
</div>
</el-dialog>
</div>
<el-button size="mini" @click="showChart(scope)">查看聊天记录</el-button>

再是函数方法里面的

这是点击按钮进入聊天弹框触发的函数
showChart(scope) {
this.value = [120, 140]
this.liveIdRow = scope.row.LiveID
this.TeacherIDRow = scope.row.TeacherID
this.searchValue.time = []
this.data = []
if (scope) {
var startTime = scope.row.StartTime
var endTime = moment(startTime)
.add(20, 'm')
.format('YYYY-MM-DD HH:mm:ss')
this.searchValue.time.push(startTime)
this.searchValue.time.push(endTime)
this.focusTimeList = []
for (var i = 0; i < 7; i++) {
this.focusTimeList.push(
moment(startTime)
.add(60 * i, 'm')
.format('YYYY-MM-DD HH:mm:ss')
)
}
this.focusTimeListTwo = []
for (var k = 0; k < 3; k++) {
this.focusTimeListTwo.push(
moment(this.focusTimeList[0])
.add(-60 * k, 'm')
.format('YYYY-MM-DD HH:mm:ss')
)
}
}
this.loading = true
this.showFlag = true
this.recordList = []
var body = {
liveid: this.liveIdRow,
teacherid: this.TeacherIDRow,
start: this.searchValue.time[0],
end: this.searchValue.time[1]
}
return request({
method: 'get',
url: '/api/teacher/chat',
params: body
}).then(res => {
if (res.Content) {
this.messages = res.Content
this.messages.forEach(item => {
var num = parseInt(19 * Math.random())
item.img = require(`../../../assets/auter/icon-test_${num}.png`)
item.msgs = item.msg
.replace(/\[e\]em_/g, '<img src=../../../static/faces/em_')
.replace(/\[e\]/g, '.png>')
})
this.recordList = this.messages
this.loading = false
} else {
this.$message({
message: '无分析结果!',
type: 'warning'
})
this.loading = false
}
})
},
这是滑块自带的函数你可以去elementui官网看一下了解一下大概就是你滑动一下滑块每次都触发的函数
formatTooltip(val) {
this.val = val
this.marks = {
0: this.focusTimeListTwo[2].substring(11, 19),
60: this.focusTimeListTwo[1].substring(11, 19),
120: this.focusTimeList[0].substring(11, 19),
180: this.focusTimeList[1].substring(11, 19),
240: this.focusTimeList[2].substring(11, 19),
300: this.focusTimeList[3].substring(11, 19)
}
if (val != null) {
var hour = this.focusTimeListTwo[2].substring(11, 13)
var min = this.focusTimeListTwo[2].substring(14, 16)
if (val < 60 || val == 60) {
min = min * 1 + val
if (min == 60) {
min = 0
hour = this.focusTimeListTwo[1].substring(11, 13) * 1
}
hour = hour * 1
if (min > 60) {
min = min - 60
hour = hour + 1
}
}
if ((val > 60 && val < 120) || val == 120) {
min = this.focusTimeListTwo[1].substring(14, 16) * 1
hour = this.focusTimeListTwo[1].substring(11, 13) * 1
min = min * 1 + val - 60
if (min == 60) {
min = 0
hour = this.focusTimeList[0].substring(11, 13) * 1
}
if (min > 60) {
min = min - 60
hour = hour + 1
}
}
if ((val > 120 && val < 180) || val == 120) {
min = this.focusTimeList[0].substring(14, 16) * 1
min = min * 1 + val - 120
hour = this.focusTimeList[0].substring(11, 13) * 1
if (min == 60) {
min = 0
hour = this.focusTimeList[1].substring(11, 13) * 1
}
if (min > 60) {
min = min - 60
hour = hour + 1
}
}
if ((val > 180 && val < 240) || val == 180) {
min = this.focusTimeList[1].substring(14, 16) * 1
min = min * 1 + val - 180
hour = this.focusTimeList[1].substring(11, 13) * 1
if (min == 60) {
min = 0
hour = this.focusTimeList[2].substring(11, 13) * 1
}
if (min > 60) {
min = min - 60
hour = hour + 1
}
}
if ((val > 240 && val < 300) || val == 240) {
min = this.focusTimeList[2].substring(14, 16) * 1
min = min * 1 + val - 240
hour = this.focusTimeList[2].substring(11, 13) * 1
if (min == 60) {
min = 0
hour = this.focusTimeList[3].substring(11, 13) * 1
}
if (min > 60) {
min = min - 60
hour = hour + 1
}
}
if (val == 300) {
min = this.focusTimeList[3].substring(14, 16) * 1
min = min * 1 + val - 300
hour = this.focusTimeList[3].substring(11, 13) * 1
if (min > 60) {
min = min - 60
hour = hour + 1
}
}
if (hour < 10) {
hour = '0' + hour
}
if (min < 10) {
min = '0' + min
}
this.hour = hour
this.min = min
const time = hour + ':' + min
return time
} else {
hour = 0
min = 0
hour = this.focusTimeList[0].substring(11, 13)
min = this.focusTimeList[0].substring(14, 16)
const time = hour + ':' + min
return time
}
},
下面也是elementui自带函数大概意思就是你拖动划款松开鼠标触发的
schedule() {
this.searchValue.time = []
const start = this.focusTimeList[0]
const daydata = this.focusTimeListTwo[1].substring(0, 10)
const end = daydata + ' ' + this.hour + ':' + this.min + ':' + '00'
this.timer = daydata + ' ' + this.hour + ':' + this.min + ':' + '00'
this.searchValue.time.push(start)
this.searchValue.time.push(end)
this.loading = true
this.showFlag = true
this.recordList = []
if (this.valNew > this.valOld) {
var body = {
liveid: this.liveIdRow,
teacherid: this.TeacherIDRow,
start: this.searchValue.time[0],
end: this.searchValue.time[1]
}
return request({
method: 'get',
url: '/api/teacher/chat',
params: body
}).then(res => {
if (res.Content) {
this.messages = res.Content
this.messages.forEach(item => {
var num = parseInt(19 * Math.random())
item.img = require(`../../../assets/auter/icon-test_${num}.png`)
item.msgs = item.msg
.replace(/\[e\]em_/g, '<img src=../../../static/faces/em_')
.replace(/\[e\]/g, '.png>')
})
this.recordList = this.messages
this.loading = false
} else {
this.$message({
message: '无分析结果!',
type: 'warning'
})
this.loading = false
}
})
}
this.$nextTick(() => {
if (this.valNew < this.valOld) {
this.searchValue.time = []
this.searchValue.time[0] = this.datanewVI
this.searchValue.time[1] = this.dataoldVI
this.loading = true
this.showFlag = true
this.recordList = []
console.log(this.searchValue.time, 'watch')
const body = {
liveid: this.liveIdRow,
teacherid: this.TeacherIDRow,
start: this.searchValue.time[0],
end: this.searchValue.time[1]
}
return request({
method: 'get',
url: '/api/teacher/chat',
params: body
}).then(res => {
if (res.Content) {
this.messages = res.Content
this.messages.forEach(item => {
var num = parseInt(19 * Math.random())
item.img = require(`../../../assets/auter/icon-test_${num}.png`)
item.msgs = item.msg
.replace(/\[e\]em_/g, '<img src=../../../static/faces/em_')
.replace(/\[e\]/g, '.png>')
})
this.recordList = this.messages
this.loading = false
} else {
this.$message({
message: '无分析结果!',
type: 'warning'
})
this.loading = false
}
})
}
})
},
这个是计算函数 大概作用就是深拷贝
,
computed: {
datainit: function() {
var obj = {}
obj = JSON.parse(JSON.stringify(this.searchValue.time))
return obj
}
},
下面是监听函数 这就不用多说了 大家都懂监听
watch: {
datainit(newV, oldV) {
this.datanewV = newV[0]
this.datanewVI = newV[1]
this.dataoldV = oldV[0]
this.dataoldVI = oldV[1]
console.log(newV, 'newV,oldV', oldV)
},
val(newV, oldV) {
this.valNew = newV
this.valOld = oldV
}
},

贴代码是方便你们copy  下面就是带图讲解

完成上面这些你就可以随便滑动得到时间显示时间了

其实这个都很简单主要是取值问题是往后滑动没问题 怎么都能去取到值 就是往前拖动我怎么都拿不到前面的值  最后我想了办法把时间存起来深拷贝一下 再进行监听和新旧元素对比 这样就可以完美得到值了

这是刚开始进来

这是往前

这是往后

最后回去发现一开始进去就往左滑动会有bug进行改动改了就判断的地方

改成小于120还有大于120 这样就可以 但是bug还是有我服了   只能一开始进来右边滑块只能往右滑动 左边滑块只能往左滑动才能得到正确数据  一开始右边滑块往左移动和一开始进来左边滑块往右移动都拿不到正确数据 我枯了  求大神carry

3月31改动

终于经过我不懈努力 终于完美实现滑块怎么动都可以拿到值 我也是无意之中想到的  在元素上绑定ref利用ref来得到数值 特别特别的方便

给大家看改过的代码 只改动这里就够了之前写了太多多余的代码了

schedule() {
this.searchValue.time = []
const start = this.focusTimeList[0]
const daydata = this.focusTimeListTwo[1].substring(0, 10)
const end = daydata + ' ' + this.hour + ':' + this.min + ':' + '00'
this.searchValue.time.push(start)
this.searchValue.time.push(end)
this.loading = true
this.showFlag = true
this.recordList = []
this.$nextTick(() => {
this.searchValue.time = []
this.searchValue.time[0] = this.$refs.sliders.$children[0].formatValue
this.searchValue.time[1] = this.$refs.sliders.$children[1].formatValue
this.loading = true
this.showFlag = true
this.recordList = []
const body = {
liveid: this.liveIdRow,
teacherid: this.TeacherIDRow,
start: this.searchValue.time[0],
end: this.searchValue.time[1]
}
return request({
method: 'get',
url: '/api/teacher/chat',
params: body
}).then(res => {
if (res.Content) {
this.messages = res.Content
this.messages.forEach(item => {
var num = parseInt(19 * Math.random())
item.img = require(`../../../assets/auter/icon-test_${num}.png`)
item.msgs = item.msg
.replace(/\[e\]em_/g, '<img src=../../../static/faces/em_')
.replace(/\[e\]/g, '.png>')
})
this.recordList = this.messages
this.loading = false
} else {
this.$message({
message: '无分析结果!',
type: 'warning'
})
this.loading = false
}
})
})
},

终于大功告成了

感谢大家 要觉得不错右侧打赏一下把

elementUI slider组件,带范围选择实现双向绑定的更多相关文章

  1. vue2.X props 数据传递 实现组件内数据与组件外的数据的双向绑定

    vue2.0 禁止 子组件修改父组件数据 在Vue2中组件的props的数据流动改为了只能单向流动,即只能由组件外(调用组件方)通过组件的DOM属性attribute传递props给组件内,组件内只能 ...

  2. elementUI tree组件获取当前选择所有选中(check)和半选中(indeterminate)的节点

    网上查了半天,一大堆都说要改源码的,最后发现有方法不用改源码的 获取方法如下 this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHa ...

  3. vue.js组件之间通讯的数据双向绑定----父亲把数据传递给儿子,儿子更改数据后,重新发送给父亲,父亲数据更改后,属性会重新发送个儿子,儿子刷新新数据

    vue组件是相互独立的,如果要交互通讯,这时候,就需要组件之间数据互通了 往常我们讲的都是数据传递,子传父,父传子,都没有说子和父,父与子之间的数据互通 父亲传递给儿子数据,儿子触发一个父亲方法,将最 ...

  4. 如何在Vue2中实现组件props双向绑定

    Vue学习笔记-3 前言 Vue 2.x相比较Vue 1.x而言,升级变化除了实现了Virtual-Dom以外,给使用者最大不适就是移除的组件的props的双向绑定功能. 以往在Vue1.x中利用pr ...

  5. (复习)父子组件传值使用v-modal双向绑定,报错Avoid mutating a prop directly解决方案

    报错:Avoid mutating a prop directly since the value will be overwritten whenever the parent component. ...

  6. Blazor和Vue对比学习(基础1.5):双向绑定

    这章我们来学习,现代前端框架中最精彩的一部分,双向绑定.除了掌握原生HTML标签的双向绑定使用,我们还要在一个自定义的组件上,手撸实现双向绑定.双向绑定,是前两章知识点的一个综合运用(父传子.子传父) ...

  7. VUE JS 使用组件实现双向绑定

    1.VUE 前端简单介绍  VUE JS是一个简洁的双向数据绑定框架,他的性能超过ANGULARJS,原因是实现的机制和ANGULARJS 不同,他在初始化时对数据增加了get和set方法,在数据se ...

  8. element-ui dialog组件添加可拖拽位置 可拖拽宽高

    edge浏览器下作的gifhttp://www.lanourteam.com/%E6... 有几个点需要注意一下 每个弹窗都要有唯一dom可操作 指令可以做到 拖拽时要添加可拖拽区块 header 由 ...

  9. Elementui tabs组件内添加组件

    1. Elementui tabs组件内添加组件 1.1. 需求 今天的一个需求是在后台框架的基础上添加tab页,结果页面如下 原本上述红框内的内容是不存在的,直接点击左侧菜单栏进行页面跳转,现加了t ...

  10. 自定义组件实现双向绑定v-model

    自定义组件实现 v-model 双向绑定,首先要先明白 v-model,这个指令到底实现了什么? v-model实际做的事情就是:传入一个value属性值,然后监听input事件返回一个值,用该返回值 ...

随机推荐

  1. 推荐一波微软家的浏览器:EDGE

    前段时间英雄联盟(LOL)队伍 EDG 夺冠成为热门事件,上了各大热搜,即使大家不玩英雄联盟,相信也多多少少有听说相关信息吧! 今天我们的主角并不是 EDG,而是微软的新版浏览器 EDGE !!! 微 ...

  2. 企业实施定制鞋厂ERP软件需要注意哪些问题?

    企业实施定制ERP软件是个复杂的管理系统工程,为了成功地为企业定制实施ERP软件,需要注意和解决几个关键的问题: (1) . 确立ERP系统实施和定制的决策者: (2) . 做好前期咨询与调研工作: ...

  3. 力扣1346(java&python)-检查整数及其两倍数是否存在(简单)

    题目: 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M). 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 &l ...

  4. 【USENIX ATC】支持异构GPU集群的超大规模模型的高效的分布式训练框架Whale

    简介: 高效大模型训练框架Whale(EPL)入选USENIX ATC 作者:张杰.贾贤艳 近日,阿里云机器学习PAI关于深度学习模型高效的分布式训练框架的论文< Whale: Efficien ...

  5. 一站式云原生智能告警运维平台——SLS新版告警发布!

    简介: 本文介绍什么是云原生可观测性需求以及告警限制,介绍一站式云原生智能告警运维平台--SLS新版告警. 前言 本篇是SLS新版告警系列宣传与培训的第一篇,后续我们会推出20+系列直播与实战培训视频 ...

  6. [Go] 有了 cast 组件, golang 类型转换从此不再困扰

    在 golang 中,参数和返回值之间往往涉及 int.string.[].map 等之间的转换. 如果是手动去处理,一容易出错,二不能兼容多数类型,比较麻烦. 使用 cast,能够让代码更健壮.可维 ...

  7. Quill富文本编辑器的实践 - DevUI

    DevUI 是一款面向企业中后台产品的开源前端解决方案,它倡导沉浸.灵活.至简的设计价值观,提倡设计者为真实的需求服务,为多数人的设计,拒绝哗众取宠.取悦眼球的设计.如果你正在开发 ToB 的工具类产 ...

  8. WPF 优化 EnsureHandle 启动性能

    本文将记录一个在 WPF 应用程序启动过程中的性能优化点.如果一个窗口需要设置 WindowStyle 属性,那么在窗口 EnsureHandle 之前,设置 WindowStyle 属性将会比在 E ...

  9. Part-DB 配置流程

    介绍 Part-DB是一个开源的器件管理工具,博主用于管理个人的电子器材,最近捣鼓了一下这个工具,由于手头还有一块闲置的赛昉·星光2的开发板,所以我打算一起拿来捣鼓一下,如果不成功,就用树莓派(生气) ...

  10. 鸿蒙HarmonyOS实战-ArkUI事件(触屏事件)

    前言 触屏事件是指通过触摸屏幕来进行操作和交互的事件.常见的触屏事件包括点击(tap).双击(double tap).长按(long press).滑动(swipe).拖动(drag)等.触屏事件通常 ...