惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
IT之家
IT之家
Last Week in AI
Last Week in AI
J
Java Code Geeks
L
LangChain Blog
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
博客园 - Franky
博客园 - 司徒正美
月光博客
月光博客
博客园 - 叶小钗
Vercel News
Vercel News
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
H
Help Net Security
G
Google Developers Blog
D
DataBreaches.Net

追梦人物的博客

小度智能设备接入 Home Assistant,支持小爱同学语音控制 - 追梦人物的博客 0x05:Merkle Tree & Patricia Trie 0x04:ECDSA - 以太坊设计与实现 LeetCode 105 从前序与中序遍历构造二叉树 迭代算法原理 + 完整证明 0x03:Address - 以太坊设计与实现 0x02:Secp256k1 - 以太坊设计与实现 0x00:专栏开篇 - 以太坊设计与实现 0x01:RLP 编码 - 以太坊设计与实现 Bellman-Ford 算法原理及其在 DeFi 套利中的应用 - 追梦人物的博客 迪杰斯特拉(Dijkstra)最短路径算法原理、实现与证明 - 追梦人物的博客 实战:CEX-DEX 稳定币套利监控程序开发 - 追梦人物的博客 CEX-DEX 稳定币套利模型 - 追梦人物的博客 Uniswap 手续费和协议费机制剖析 - 追梦人物的博客 Uniswap 流动性机制及相关数学原理分析 - 追梦人物的博客 uv 替代 pyenv + pipx + poetry 环境管理实践 Rust 项目从创建到发布 - 追梦人物的博客 VS Code 调试 Python - 追梦人物的博客 比特币跨市场套利的数学模型 - 追梦人物的博客 ERC-20 相关知识点总结 - 追梦人物的博客 Django 老项目如何从 SQLite 迁到 PostgreSQL 自动生成接口文档 - HelloDjango - django REST framework 教程 单元测试 - HelloDjango - django REST framework 教程 限制接口访问频率 - HelloDjango - django REST framework 教程 API 版本管理 - HelloDjango - django REST framework 教程 如何在 Windows 下搭建高效的 django 开发环境 拓展Python Markdown - 追梦人物的博客 加缓存为接口提速 - HelloDjango - django REST framework 教程 基于 drf-haystack 实现文章搜索接口 - HelloDjango 评论接口 - HelloDjango - django REST framework 教程 实现分类、标签、归档日期接口 - HelloDjango - django REST framework 教程
添加todo - Vue 2.x Todo 教程
2019-01-07 · via 追梦人物的博客

在教程的第一篇 入门仪式:Hello Vue 中我们演示了一个 Vue 绑定 input 输入值的示例,添加 todo 的功能和那个例子有异曲同工之妙。

为了知道用户输入了什么内容,我们使用 v-model 指令将 input 的 value 值和 Vue 的实例绑定,这样在 Vue 中我们就知道了用户输入的值。然后我们监听用户按下回车的事件,一旦这个事件被触发,我们就在 Vue 实例中调用相应的方法,把新的值添加到 todos 列表中,下面来一步步完成上面的步骤。

绑定 input 的输入:

<div id="todo-app">
    ...
  <div>
    ...
    <input type="text" 
           placeholder="添加 todo" 
           v-model="newTodoTitle"/>
  </div>
    ...
</div>
...
<script>
    var app = new Vue({
        el: '#todo-app',
        data: function () {
            return {
                todos: [],
                newTodoTitle: ''
            }
        },
    })
</script>

我们把预先填充在 todos 列表的值清空了,因为一开始是没有 todo 的。然后我们使用 v-model 指令将 input 的 value 属性的值与 Vue 实例的 newTodoTitle 值绑定。注意这里绑定的数据可以取任何名字,不一定要和 input 的属性 value 相同。

然后我们监听键盘敲击回车的事件:

<div id="todo-app">
    ...
   <input type="text" 
          placeholder="添加 todo"
          v-model="newTodoTitle"
          @keyup.enter="addTodo"/>
    ...
</div>
...
<script>
    var app = new Vue({
        el: '#todo-app',
        data: function () {
            return {
                todos: [],
                newTodoTitle: ''
            }
        },
    })
</script>

注意到 @keyup.enter="addTodo",我们之前的示例中绑定过 click 事件,绑定键盘按键的事件为 keyup,然后我们使用 enter 对事件进行修饰,表明这个事件是按下回车,而不是按下别的什么键。Vue为按键提供了很多修饰符,可以参考 Vue 按键修饰符的官方文档。事件绑定后,一旦用户按下回车,就会调用后边的 addTodo 方法。

实现 addTodo 方法:

<script>
    let id = 0; // 用于 id 生成
    var app = new Vue({
        ...
        methods: {
            addTodo: function () {
                this.todos.push({id: id++, title: this.newTodoTitle});
                this.newTodoTitle = ''
            }
        }
    })
</script>

示例中已经说过方法声明在 Vue 对象的 methods 属性里。这个 addTodo 方法做的事情很简单,生成一个新的 todo 对象,然后将其添加到 todos 列表里(push 方法就是把一个元素加入到数组的末尾),然后将用户的输入值清空。始终注意这里 newTodoTitle 和输入框的 value 值是双向绑定的,任何一个值改变,相应的值都会跟着变。

打开浏览器,试着添加几个 todo 吧!

练习

练习一:我们的方法有一个小 bug,如果用户什么内容也没有输入,但是敲下了回车,我们的应用会为其创建一个空的 todo,正确的效果应该是不做任何动作。尝试修改程序,实现正确的效果。

练习二:能否进一步地,当用户尝试创建空的 todo 时,我们的输入框边框变红色,提醒用户没有任何内容输入,以及在输入框后边显示“请输入内容”之类的提示信息呢?(hint:结合之前示例中给出的计算属性、动态绑定 class、v-if 指令来实现,你可能需要参考 Vue 的官方文档了解这些内容)。

涉及的官方文档:

-- EOF --