课题

  1. 程序界面由3个文本编辑框和1个文本标签组成。
  2. 要求文本标签实时显示3个文本编辑框所输入的数字之和。
  3. 文本编辑框输入的不是合法数字时,将其值视为0。
  4. 3个文本编辑框的初值分别为1,2,3。

创建工程

# 安装 Vue CLI
$ npm install --global @vue/cli
# 创建新的应用程序 RxExample
$ vue create rx-example
# 选择 Manually select features
# 选择 Babel 和 TypeScript
$ cd rx-example
$ npm run serve

打开 Intellij IDEA, File / New / Project From Existing Sources...,然后选中工程所在文件夹

在向导的第1页选择 Create project from existing sources

完成向导后在点击 Finish 创建工程。

点击 Add Configurations, 点击 +npm

Name: Vue CLI Server

Scripts: serve

点击 OK 完成配置。

点击 Vue CLI Server 启动程序。

http://localhost:8080/ 可打开网页。

不使用 RxJS 的解决方案

删除 HelloWorld 组件,即 src/components/HelloWorld.vue 文件。

打开 App.vue,将其改为

<template>
<p>
<input class="number" v-model="number1" @input="onChangeNumber()"> +
<input class="number" v-model="number2" @input="onChangeNumber()"> +
<input class="number" v-model="number3" @input="onChangeNumber()"> =
<label>{{result}}</label>
</p>
</template> <script lang="ts">
export default class App extends Vue { number1 = '1';
number2 = '2';
number3 = '3';
result = ''; mounted() {
this.onChangeNumber();
} onChangeNumber() {
const g = (s: string) => Number(s) || 0;
this.result = String(g(this.number1) + g(this.number2) + g(this.number3));
}
}
</script> <style>
.number {
width: 50px;
text-align: right;
}
</style>

使用 RxJS 的解决方案

删除 HelloWorld 组件,即 src/components/HelloWorld.vue 文件。

打开 App.vue,将其改为

<template>
<p>
<input id="number1" class="number" value="1"> +
<input id="number2" class="number" value="2"> +
<input id="number3" class="number" value="3"> =
<label>{{result2}}</label>
</p>
</template> <script lang="ts">
import { combineLatest, fromEvent, Observable } from 'rxjs';
import { map, pluck, startWith } from 'rxjs/operators'; export default class App extends Vue {
result2 = ''; mounted() {
const f = (id: string) => {
const e = document.getElementById(id) as HTMLInputElement;
return fromEvent(e, 'input').pipe<string, string>(pluck('target', 'value'), startWith(e.value)) as Observable<string>;
};
const g = (s: string) => Number(s) || 0;
combineLatest(f('number1'), f('number2'), f('number3'))
.pipe(map((results: string[]) => String(g(results[0]) + g(results[1]) + g(results[2]))))
.subscribe(result => this.result2 = result);
}
}
</script> <style>
.number {
width: 50px;
text-align: right;
}
</style>

ReactiveX 学习笔记(27)使用 RxJS + Vue.js 进行 GUI 编程的更多相关文章

  1. ReactiveX 学习笔记(28)使用 RxJS + React.js 进行 GUI 编程

    课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...

  2. ReactiveX 学习笔记(0)学习资源

    ReactiveX 学习笔记 ReactiveX 学习笔记(1) ReactiveX 学习笔记(2)创建数据流 ReactiveX 学习笔记(3)转换数据流 ReactiveX 学习笔记(4)过滤数据 ...

  3. ReactiveX 学习笔记(25)使用 RxJS + Vue.js 调用 REST API

    JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. ...

  4. Vue.js 学习笔记之五:编译 vue 组件

    正如上一篇笔记中所说,直接使用 ES6 标准提供的模块规范来编写 Vue 组件在很多情况下可能并不是最佳实践.主要原因有两个,首先是市面上还有许多并没有对 ES6 标准提供完全支持的 Web 浏览器, ...

  5. Dynamic CRM 2013学习笔记(九)CrmFetchKit.js介绍:Fetchxml、多表联合查询, 批量更新

    CrmFetchKit.js是一个跨浏览器的一个类库,允许通过JavaScript来执行fetch xml的查询,还可以实现批量更新,分页查询等.目前已支持Chrome 25, Firefox 19 ...

  6. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

  7. Nodejs学习笔记(六)—Node.js + Express 构建网站预备知识

    前言 前面经过五篇Node.js的学习,基本可以开始动手构建一个网站应用了,先用这一篇了解一些构建网站的知识! 主要是些基础的东西... 如何去创建路由规则.如何去提交表单并接收表单项的值.如何去给密 ...

  8. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  9. vue学习笔记(四)——Vue实例以及生命周期

    1.Vue实例API 1.构造器(实例化) var vm = new Vue({ //选项 |-------DOM(3) |   |-------el (提供一个在页面上已存在的 DOM 元素作为 V ...

随机推荐

  1. js 父类选择前后差异

    $(this).parent().prev().text(""); $(this).parent().text(""); 如果这俩个顺序调换则再使用prev() ...

  2. 从零开始打jar包--补充

    想试一下动态编译的功能,所以想看一下java如何编译 原文见:http://www.cnblogs.com/flashsun/p/7246260.html 但这篇文章有些错误及遗漏之处,导致有些没有办 ...

  3. FPGA Asynchronous FIFO设计思路(2)

    FPGA Asynchronous FIFO设计思路(2) 首先讨论格雷码的编码方式: 先看4bit的格雷码,当MSB为0时,正向计数,当MSB为1时,即指针已经走过一遍了,最高位翻转,此时的格雷码是 ...

  4. c# 使用http摘要认证

    .net 使用http摘要认证,返回json数据 using System; using System.Collections.Generic; using System.Linq; using Sy ...

  5. 工控随笔_04_西门子_解决Step 7软件因授权问题不能打开的方式和方法

    西门子的软件是授权软件,只有经过授权认证的用户才能使用,如果没有通过授权认证则不能 正常的使用软件的相关功能. 一.西门子授权不成功问题 如上图所示报故障代码: 000001-0505.报警文本为:未 ...

  6. windows 下 Django 搭架子 - 从建立project到建立app

    第一步,安装python 3.6 到C:\Python,在Python官网下Windows版的安装包即可 安装Django,在命令行下直接 pip install django,django 被安装在 ...

  7. [转][SerialPort]测试用例

    private void Form1_Load(object sender, EventArgs e) { var s = SerialPort.GetPortNames().OrderBy(r =& ...

  8. es6入门总结

    let和const命令 let命令 循环体的let变量只对花括号作用域可见,花括号外不可见 循环体的语句部分是一个父作用域,而循环体内部是一个单独的子作用域 let声明的变量不存在变量提升,未声明的使 ...

  9. 基于STM8的UART发送和中断接收---STM8-第二章

    1. 综述 UART的基础知识,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器. 做软件开发的人都 ...

  10. vs编写x64内联汇编

    参考自: https://www.cnblogs.com/achillis/p/5369658.html 先转过来, 等实践过了再做相应的修改, hehe 编写涉及系统特性的一些底层程序,特别是She ...