网上查过很多相关文章都没有一章是写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. 在RockyLinux 9.3环境中采用RPM模式部署Oracle 19C

    在RockyLinux 9.3环境中采用RPM模式部署Oracle 19C 用途 在开发数据库系统时,可以验证功能是否与Oracle的表现一致,验证正确性和兼容性 限制 虚拟机安装,CPU 2*4 内 ...

  2. 360 政企安全集团基于 Flink 的 PB 级数据即席查询实践

    简介: Threat Hunting 平台的架构与设计,及以降低 IO 为目标的优化与探索.为什么以及如何使用块索引. 本文整理自 360 政企安全集团的大数据工程师苏军以及刘佳在 Flink For ...

  3. [GPT] Nginx+PHP 技术栈 504 Gateway Time-out 解决方案

      1. 504 Gateway Time-out 是什么情况? 504 Gateway Time-out 是一种 HTTP 状态码,表示服务器在作为网关或代理时无法从上游服务器(例如应用程序服务器) ...

  4. IIncrementalGenerator 判断程序集之间可见关系

    本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何判断两个程序集之间是否存在 InternalsVisibleTo 关系 ...

  5. dotnet 世界猜测 随机数的小测试

    这是一个半技术向的博客,主题来源于我读过的某本书的片段,这是一个稍稍有些前置知识的故事,主题的大概内容就是假定世界存在某个规则序列,通过一代代的探索,可以获取到此序列的内容.本文将模拟此情形,写一个随 ...

  6. 安装petalinux

    1.petalinux工具下载,下载地址: https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloa ...

  7. 如何基于surging跨网关跨语言进行缓存降级

    概述 surging是一款开源的微服务引擎,包含了rpc服务治理,中间件,以及多种外部协议来解决各个行业的业务问题,在日益发展的今天,业务的需求也更加复杂,单一语言也未必能抗下所有,所以在多语言行业解 ...

  8. 【git】建立分支

    1.git clone现有的项目 git clone git@github.com:zhangshengdong/Zflask.git 2.建立关联 git remote add origin git ...

  9. idea在商店无法搜索到插件

    背景:我使用的版本是IDEA ultimate 2019.2 版本印象中,最初安装的时候,商店还是可以用的,突然有一天,就无法使用了.下边直入正题: 解决办法:1.首先浏览器登陆下:https://p ...

  10. 网络流量分析 | AnaTraf 网络故障排除万用表教程更新: 如何抓取两个 MAC / IP 地址之间的流量?

    AnaTraf 致力于提供国产化网络流量分析.网络可视化.网络故障排除解决方案. AnaTraf 网络万用表是一款实时的网络测量.流量分析工具,用于网络流量监控.识别网络性能瓶颈.快速排查网络问题. ...