1、任务列表
src/pages/Todo.vue
先设置背景颜色,并且填充整个页面
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
</q-page>
</template>
复制代码
在Quasar组件库中,找到任务列表的组件,复制代码
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 复选框任务列表 -->
<q-list>
<!-- 任务项 -->
<q-item tag="label" v-ripple>
<q-item-section avatar>
<q-checkbox v-model="color" val="teal" color="teal" />
</q-item-section>
<q-item-section>
<q-item-label>Teal</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
复制代码
绑定数据源及列表项的循环
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 复选框任务列表 -->
<q-list
class="bg-white"
separator
bordered>
<!-- 任务项 v-for进行循环 -->
<q-item v-for="(task, index) in tasks" :key="task.title" tag="label" v-ripple>
<q-item-section avatar>
<q-checkbox v-model="task.done" color="primary" />
</q-item-section>
<q-item-section>
<!-- 任务名称 -->
<q-item-label>{{task.title}}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
<script>
export default {
// 任务的数据源
data() {
return {
// 任务列表
tasks: [
{
title: '学习',
done: true
},
{
title: '吃饭',
done: false
},
{
title: '睡觉',
done: false
}
]
}
}
}
</script>
复制代码
2、删除任务
添加完成任务时的样式,删除线及背景色
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 复选框任务列表 -->
<q-list
class="bg-white"
separator
bordered>
<!-- 任务项 v-for进行循环 -->
<!-- @click给任务项添加点击事件,改变任务的完成状态 -->
<!-- :class="{'done bg-blue-1': task.done}" 给任务项绑定样式 -->
<q-item
v-for="(task, index) in tasks"
:key="task.title"
@click="task.done = !done"
clickable
:class="{'done bg-blue-1': task.done}"
v-ripple>
<q-item-section avatar>
<q-checkbox v-model="task.done" color="primary" />
</q-item-section>
<q-item-section>
<!-- 任务名称 -->
<q-item-label>{{task.title}}</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
<script>
export default {
// 任务的数据源
data() {
return {
// 任务列表
tasks: [
{
title: '学习',
done: true
},
{
title: '吃饭',
done: false
},
{
title: '睡觉',
done: false
}
]
}
}
}
</script>
<style lang="scss">
// 设置任务项目完成时的下划线样式
.done {
.q-item__label {
text-decoration: line-through;
color: #bbbbbb;
}
}
</style>
复制代码
添加删除按钮
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 复选框任务列表 -->
<q-list
class="bg-white"
separator
bordered>
<!-- 任务项 v-for进行循环 -->
<!-- @click给任务项添加点击事件,改变任务的完成状态 -->
<!-- :class="{'done bg-blue-1': task.done}" 给任务项绑定样式 -->
<q-item
v-for="(task, index) in tasks"
:key="task.title"
@click="task.done = !done"
clickable
:class="{'done bg-blue-1': task.done}"
v-ripple>
<q-item-section avatar>
<q-checkbox v-model="task.done" color="primary" />
</q-item-section>
<q-item-section>
<!-- 任务名称 -->
<q-item-label>{{task.title}}</q-item-label>
</q-item-section>
<!-- 删除按钮 -->
<!-- v-if增加一个判断 -->
<q-item-section v-if="task.done" side>
<!-- 删除按钮 -->
<q-btn
flat
round
dense
color="primary"
icon="delete" />
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
……
复制代码
添加删除按钮的方法
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 复选框任务列表 -->
<q-list
class="bg-white"
separator
bordered>
<!-- 任务项 v-for进行循环 -->
<!-- @click给任务项添加点击事件,改变任务的完成状态 -->
<!-- :class="{'done bg-blue-1': task.done}" 给任务项绑定样式 -->
<q-item
v-for="(task, index) in tasks"
:key="task.title"
@click="task.done = !done"
clickable
:class="{'done bg-blue-1': task.done}"
v-ripple>
<q-item-section avatar>
<q-checkbox v-model="task.done" color="primary" />
</q-item-section>
<q-item-section>
<!-- 任务名称 -->
<q-item-label>{{task.title}}</q-item-label>
</q-item-section>
<!-- 删除按钮 -->
<!-- v-if增加一个判断 -->
<q-item-section v-if="task.done" side>
<!-- 删除按钮 -->
<!-- @click触发删除任务的方法 -->
<q-btn
@click.stop="deleteTask(index)"
flat
round
dense
color="primary"
icon="delete" />
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
<script>
export default {
// 任务的数据源
data() {
return {
newTask: '',
tasks: [
{
title: '学习',
done: true
},
{
title: '吃饭',
done: false
},
{
title: '睡觉',
done: false
}
]
}
},
// 删除任务deleteTask方法
methods: {
deleteTask(index) {
this.tasks.splice(index, 1)
},
}
}
</script>
复制代码
删除任务的时候,触发一个对话框,确定之后再执行删除任务
在Quasar插件中挑选一个对话框,拷贝代码
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 复选框任务列表 -->
<q-list
class="bg-white"
separator
bordered>
<!-- 任务项 v-for进行循环 -->
<!-- @click给任务项添加点击事件,改变任务的完成状态 -->
<!-- :class="{'done bg-blue-1': task.done}" 给任务项绑定样式 -->
<q-item
v-for="(task, index) in tasks"
:key="task.title"
@click="task.done = !done"
clickable
:class="{'done bg-blue-1': task.done}"
v-ripple>
<q-item-section avatar>
<q-checkbox v-model="task.done" color="primary" />
</q-item-section>
<q-item-section>
<!-- 任务名称 -->
<q-item-label>{{task.title}}</q-item-label>
</q-item-section>
<q-item-section v-if="task.done" side>
<!-- 删除按钮 -->
<!-- @click触发删除任务的方法 -->
<q-btn
@click.stop="deleteTask(index)"
flat
round
dense
color="primary"
icon="delete" />
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
<script>
export default {
// 任务的数据源
data() {
return {
newTask: '',
tasks: [
{
title: '学习',
done: true
},
{
title: '吃饭',
done: false
},
{
title: '睡觉',
done: false
}
]
}
},
// 删除任务deleteTask方法
// 点击删除按钮的时候,触发对话框
methods: {
deleteTask(index) {
this.$q.dialog({
title: '提示',
message: '确认删除吗?',
cancel: true,
persistent: true
}).onOk(() => {
// 点击对话框的确认按钮后,执行删除任务的操作
this.tasks.splice(index, 1)
// 删除之后,提示
this.$q.notify(‘'任务已删除'’)
})
},
}
}
</script>
复制代码
注册dialog插件
quasar.conf.js
framework: {
……
// Quasar plugins
plugins: ['Dialog', 'Notify']
},
复制代码
3、添加任务
添加任务输入框,在Quasar组件库中,找到合适的输入框,拷贝代码
<q-input bottom-slots v-model="text" label="Label" counter maxlength="12" :dense="dense">
<template v-slot:before>
<q-icon name="event" />
</template>
<template v-slot:hint>
Field hint
</template>
<template v-slot:append>
<q-btn round dense flat icon="add" />
</template>
</q-input>
复制代码
src/pages/Todo.vue
将拷贝的输入框的代码,粘贴到任务列表页面中,去掉不需要的元素
<template>
<!-- 设置背景颜色为灰色,并且填充整个页面 -->
<q-page class="bg-grey-3 column">
<!-- 新增任务,任务输入框 -->
<div class="row q-pa-sm bg-primary">
<q-input v-model="text">
<template v-slot:append>
<q-btn round dense flat icon="add" />
</template>
</q-input>
</div>
<!-- 复选框任务列表 -->
<q-list
class="bg-white"
separator
bordered>
<!-- 任务项 v-for进行循环 -->
<!-- @click给任务项添加点击事件,改变任务的完成状态 -->
<!-- :class="{'done bg-blue-1': task.done}" 给任务项绑定样式 -->
<q-item
v-for="(task, index) in tasks"
:key="task.title"
@click="task.done = !done"
clickable
:class="{'done bg-blue-1': task.done}"
v-ripple>
<q-item-section avatar>
<q-checkbox v-model="task.done" color="primary" />
</q-item-section>
<q-item-section>
<!-- 任务名称 -->
<q-item-label>{{task.title}}</q-item-label>
</q-item-section>
<!-- 删除按钮 -->
<!-- v-if增加一个判断 -->
<q-item-section v-if="task.done" side>
<!-- @click触发删除任务的方法 -->
<q-btn
@click.stop="deleteTask(index)"
flat
round
dense
color="primary"
icon="delete" />
</q-item-section>
</q-item>
</q-list>
</q-page>
</template>
复制代码
调整输入框的样式,宽度calss=“col”,背景色bg-color=”white”
<!-- 新增任务 -->
<div class="row q-pa-sm bg-primary">
<!-- 输入框组件,输入框的属性square,filled-->
<!-- class='col' -->
<q-input
v-model="text"
class="col"
filled
square
bg-color="white"
placeholder="输入任务"
dense>
<template v-slot:append>
<!-- 触发新增任务的方法 -->
<q-btn
round
dense
flat
icon="add" />
</template>
</q-input>
</div>
复制代码
效果如下:
绑定数据源,创建新增任务的方法
html
<template>
<q-page class="bg-grey-3 column">
<!-- 新增任务 -->
<div class="row q-pa-sm bg-primary">
<!-- 输入框组件,输入框的属性square,filled-->
<!-- class='col' -->
<!-- 绑定数据源v-model=“newTask” -->
<!-- 设置按键盘enter时,触发新增任务的方法addTask -->
<q-input
v-model="newTask"
@keyup.enter="addTask"
class="col"
filled
square
bg-color="white"
placeholder="输入任务"
dense>
<template v-slot:append>
<!-- 点击+图标,触发新增任务的方法addTask-->
<q-btn
@click="addTask"
round
dense
flat
icon="add" />
</template>
</q-input>
</div>
......
</q-page>
</template>
复制代码
js
export default {
// 任务的数据源
data() {
return {
newTask: '',
tasks: [
// {
// title: '学习',
// done: true
// },
// {
// title: '吃饭',
// done: false
// },
// {
// title: '睡觉',
// done: false
// }
]
}
},
// 删除任务deleteTask方法
// 插件:对话框dialog,提示框notify
methods: {
deleteTask(index) {
this.$q.dialog({
title: '提示',
message: '确认删除吗?',
cancel: true,
persistent: true
}).onOk(() => {
// console.log('>>>> OK')
this.tasks.splice(index, 1)
this.$q.notify('任务已删除')
})
},
// 添加任务的方法
addTask() {
this.tasks.push({
title: this.newTask,
done: false
})
// 清空输入框
this.newTask = ''
}
}
}
复制代码
4、当任务列表为空时的界面
html
当任务列表为空时,才显示No tasks的界面
<template>
<q-page class="bg-grey-3 column">
<!-- 新增任务 -->
<div class="row q-pa-sm bg-primary">
......
</div>
<!-- 任务列表 -->
<q-list
class="bg-white"
separator
bordered>
......
</q-list>
<!-- 任务列表为空的时候的显示样式 -->
<!-- v-if="!tasks.length任务列表为空" -->
<div
v-if="!tasks.length"
class="no-tasks absolute-center">
<q-icon name="check" size="100px" color="primary"/>
<div class="text-h5 text-primary text-center">
No tasks
</div>
</div>
</q-page>
</template>
复制代码
css
样式
设置不透明度为0.5
<style lang="scss">
// 下划线样式
.done {
.q-item__label {
text-decoration: line-through;
color: #bbbbbb;
}
}
.no-tasks {
opacity: 0.5;
}
</style>
复制代码
5、todo.vue界面完整代码
<template>
<q-page class="bg-grey-3 column">
<!-- 新增任务 -->
<div class="row q-pa-sm bg-primary">
<!-- 输入框组件,输入框的属性square,filled-->
<!-- class='col' -->
<q-input
v-model="newTask"
@keyup.enter="addTask"
class="col"
filled
square
bg-color="white"
placeholder="输入任务"
dense>
<template v-slot:append>
<!-- 触发新增任务的方法 -->
<q-btn
@click="addTask"
round
dense
flat
icon="add" />
</template>
</q-input>
</div>
<!-- 得查一下separator的用法 -->
<q-list
class="bg-white"
separator
bordered>
<!-- v-for循环数据源 -->
<!-- clickable属性 -->
<!-- 根据是否点击完成任务,绑定一个done的样式 -->
<!-- bg-blue-1增加了一个背景颜色 -->
<!-- index索引 -->
<q-item
v-for="(task, index) in tasks"
:key="task.title"
@click="task.done = !task.done"
:class="{'done bg-blue-1': task.done}"
clickable
v-ripple>
<!-- 复选框 -->
<q-item-section avatar>
<!-- class="no-pointer-events不知道是啥意思" -->
<q-checkbox
v-model="task.done"
class="no-pointer-events"
color="primary" />
</q-item-section>
<!-- 任务名称 -->
<q-item-section>
<q-item-label>{{ task.title }}</q-item-label>
</q-item-section>
<!-- 删除按钮 -->
<q-item-section
v-if='task.done'
side>
<!-- 注意@click.stop的用法 -->
<q-btn
@click.stop="deleteTask(index)"
flat
round
dense
color="primary"
icon="delete" />
</q-item-section>
</q-item>
</q-list>
<!-- 任务列表为空的时候的显示样式 -->
<!-- v-if="!tasks.length任务列表为空" -->
<div
v-if="!tasks.length"
class="no-tasks absolute-center">
<q-icon name="check" size="100px" color="primary"/>
<div class="text-h5 text-primary text-center">
No tasks
</div>
</div>
</q-page>
</template>
<script>
export default {
// 任务的数据源
data() {
return {
newTask: '',
tasks: [
// {
// title: '学习',
// done: true
// },
// {
// title: '吃饭',
// done: false
// },
// {
// title: '睡觉',
// done: false
// }
]
}
},
// 删除任务deleteTask方法
// 插件:对话框dialog,提示框notify
methods: {
deleteTask(index) {
this.$q.dialog({
title: '提示',
message: '确认删除吗?',
cancel: true,
persistent: true
}).onOk(() => {
// console.log('>>>> OK')
this.tasks.splice(index, 1)
this.$q.notify('任务已删除')
})
},
// 添加任务的方法
addTask() {
this.tasks.push({
title: this.newTask,
done: false
})
// 清空输入框
this.newTask = ''
}
}
}
</script>
<style lang="scss">
// 下划线样式
.done {
.q-item__label {
text-decoration: line-through;
color: #bbbbbb;
}
}
.no-tasks {
opacity: 0.5;
}
</style>
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END