目录层次:

目前学习曲线有三个前端开发,每个人有各自的目录,可以很好地对比彼此的代码。 

unit1

  • 邮箱验证
  • 用户名 数字、字母、中文 、划线不能以下划线开头 2-12位
  • 密码验证 6-20位英文和数字
  • 验证码验证 4-10位英文或数字
  • 手机号验证 1开头 11位

unit2

写一个足球类要求结果:

var footBall = new FootBall();
footBall.setWeight('10kg');
footBall.setPepole(12);
footBall.setHistory('足球起源于英国'); footBall.getWeight(); // 10kg
footBall.getPepole(); // 12;
footBall.getHistory; //足球起源于英国

写一个篮球类要求结果:

var basketBall = new BasketBall();
basketBall.setWeight('12kg');
basketBall.setPepole(10);
basketBall.setHistory('篮球很大'); basketBall.getWeight(); // 12kg
basketBall.getPepole(); // 10;
basketBall.getHistory; //篮球很大

写一个运动类要求结果:

var sports1 = new Sports('footBall');
sports1.getPepole() // 12
var sports2 = new Sports('basketBall');
sports2.getPepole() // 10

unit3

我之前经常使用 Vue,后来不满足于仅仅使用它,我想了解其内部实现原理,所以就尝试学习其源码,获益匪浅。所以,如果你跟我一样,希望挑战这高难度的情,那就开启这一系列吧!我们从最简单的开始。其中,动态数据绑定就是 Vue 最为基础,最为有用的一个功能。这个系列将分成5部分,一步一步来理解和实现这一功能。ok,我们从最简单的开始。给定任意一个对象,如何监听其属性的读取与变化?也就是说,如何知道程序访问了对象的哪个属性,又改变了哪个属性? 举个例子。
let app1 = new Observer({
name: 'youngwind',
age: 25
}); let app2 = new Observer({
university: 'bupt',
major: 'computer'
}); // 要实现的结果如下:
app1.data.name // 你访问了 name
app.data.age = 100; // 你设置了 age,新的值为100
app2.data.university // 你访问了 university
app2.data.major = 'science' // 你设置了 major,新的值为 science
请实现这样的一个 Observer,要求如下:
  • 传入参数只考虑对象,不考虑数组。
  • new Observer返回一个对象,其 data 属性要能够访问到传递进去的对象。
  • 通过 data 访问属性和设置属性的时候,均能打印出右侧对应的信息。

unit4

这是“动态数据绑定”系列的第二题。在第一题的基础上,我们继续考虑以下难点:如果传入参数对象是一个“比较深”的对象(也就是其属性值也可能是对象),那该怎么办呢?举个例子。
// 一个“比较深”的对象:某些属性的值也是一个对象
let obj = {
a: 1,
b: 2,
c: {
d: 3,
e: 4
}
}
如果设置新的值是一个对象的话,新设置的对象的属性是否能能继续响应 getter 和 setter。举个例子。
 let app1 = new Observer({
name: 'youngwind',
age: 25
}); app1.data.name = {
lastName: 'liang',
firstName: 'shaofeng'
}; app1.data.name.lastName;
// 这里还需要输出 '你访问了 lastName '
app1.data.name.firstName = 'lalala';
// 这里还需要输出 '你设置了firstName, 新的值为 lalala'
考虑传递回调函数。在实际应用中,当特定数据发生改变的时候,我们是希望做一些特定的事情的,而不是每一次都只能打印出一些信息。所以,我们需要支持传入回调函数的功能。举个例子。
 let app1 = new Observer({
name: 'youngwind',
age: 25
}); // 你需要实现 $watch 这个 API
app1.$watch('age', function(age) {
console.log(`我的年纪变了,现在已经是:${age}岁了`)
}); app1.data.age = 100; // 输出:'我的年纪变了,现在已经是100岁了'

unit5

这是“动态数据绑定”的第三题。在第二题的基础上,我们再多考虑一个问题:"深层次数据变化如何逐层往上传播"。举个例子。
let app2 = new Observer({
name: {
firstName: 'shaofeng',
lastName: 'liang'
},
age: 25
}); app2.$watch('name', function (newName) {
console.log('我的姓名发生了变化,可能是姓氏变了,也可能是名字变了。')
}); app2.data.name.firstName = 'hahaha';
// 输出:我的姓名发生了变化,可能是姓氏变了,也可能是名字变了。
app2.data.name.lastName = 'blablabla';
// 输出:我的姓名发生了变化,可能是姓氏变了,也可能是名字变了。
观察到了吗?firstName 和 lastName 作为 name 的属性,其中任意一个发生变化,都会得出以下结论:"name 发生了变化。"这种机制符合”事件传播“机制,方向是从底层往上逐层传播到顶层。这现象想必你们也见过,比如:“点击某一个DOM元素,相当于也其父元素和其所有祖先元素。”(当然,你可以手动禁止事件传播) 所以,这里的本质是:"浏览器内部实现了一个事件传播的机制",你有信心自己实现一个吗?

unit6

这是“动态数据绑定”的第四题。有了前面的充分准备,相信你能搞定这一题。请实现如下的这样一个 Vue,传入参数是一个 Selector 和一个数据对象,程序需要将 HTML 模板片段渲染成正确的模样。 这就是一次性的静态数据绑定。
let app = new Vue({
el: '#app',
data: {
user: {
name: 'monkeyWang',
age: 25
}
}
});
<!-- 页面中原本的 html 模板片段 -->
<div id="app">
<p>姓名:{{user.name}}</p>
<p>年龄:{{user.age}}</p>
</div>
<!-- 最终在页面中渲染出来的结果 -->
<div id="app">
<p>姓名:monkeyWang</p>
<p>年龄:25</p>
</div>
PS:此题尚未要求实现动态数据绑定

unit7

这是“动态数据绑定”的最后一题了,希望你能坚持到最后。在上一题的基础上,我们考虑如何做到:"当数据发生改变时,重新渲染 DOM。" 此目标又可以分为两层难度。
1.相对简单的目标:数据任意部分发生了变化,都重新渲染 DOM。
2.相对困难的目标:数据的某一部分发生了变动,只重新渲染对应这部分数据的 DOM。举个例子
let app = new Vue({
el: '#app',
data: {
user: {
name: 'youngwind',
age: 25
},
school: 'bupt',
major: 'computer'
}
});
<!-- 页面中原本的 html 模板片段 -->
<div id="app">
<p>姓名:{{user.name}}</p>
<p>年龄:{{user.age}}</p>
</div>
相对简单的目标是说:无论是修改数据的哪一部分(包括没有在页面中出现的 school 和 major 这两部分),DOM 都会重新渲染。(即便前后渲染结果一致)相对困难的目标是说:只有当 user.name 和 user.age 发生改变的时候,DOM 才会重新渲染;而 school 和 major 的变化不会引发重新渲染。最后,无论你选择哪种难度,能完成本题,就已经很棒了!

unit8 开发简单的豆瓣电影 web App

可以参考豆瓣githubMovie

vueStudy的更多相关文章

  1. webpack 中版本兼容性问题错误总结

    一定不要运行npm i  XXX  -g(-d) 一定要指定版本,尽量低版本,也不最新版本,会导致不兼容和指令不一样的问题. 1.安装webpack-dev-server 报错,说需要webpack- ...

  2. vue全家桶(vue2.x+vue-router+axios+webpack)项目搭建

    参考博客文章 博主FungLeo的Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版 注:原博主写的非常详细 本文章为根据原博主教程总结的自己的搭建流程 一.安装n ...

  3. 1. VUE介绍

    今天开始系统学习vue前端框架. 我是有前端基础的, 刚工作那会, 哪里分那么清楚啊, 前后端我都得做, 所以, css, js, jquery, bootstrap都会点, 还系统学过ext, 哈哈 ...

  4. vue版本一直是2.9.6版本,卸载也卸载不掉,更新也更新不了

    原文链接:https://blog.csdn.net/zlzbt/article/details/110136755 主要是找到本地文件 E:\StudyFile\VueStudy λ where v ...

  5. 10. vue之webpack打包详解

    一.什么是webpack webpack官网给出的定义是 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应 ...

  6. 使用vuex简单的实现系统中的状态管理

    最近项目中用到了vue,其中状态的集中管理使用到了vuex,因此就学习vuex做一个简单的记录.vuex的官方网址如下: https://vuex.vuejs.org/zh-cn/  vuex 当我们 ...

随机推荐

  1. python类和self解析

    在介绍Python的self用法之前,先来介绍下Python中的类和实例……我们知道,面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以用 ...

  2. Linux下配置静态IP地址,设置DNS和主机名

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  3. java:集合输出Iterator,ListIterator,foreach,Enumeration

    //集合输出,集合的四种输出 Iterator, ListIterator, foreach, Enumeration 只要碰到集合,第一输出选择是Iterator类. Iterator<E&g ...

  4. 【GDOI2014模拟】雨天的尾巴

    题目 深绘里一直很讨厌雨天. 灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切. 虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连 根拔起,以及田地里 ...

  5. vue面试题专题

    1,v-if和v-show的作用是什么?有什么区别? v-if:        创建---删除,没有元素.切换开销大.适合不频繁切换的情况用. 例子:制作搜索框,导航栏和搜索框重叠的两个框,点击搜索图 ...

  6. 面试题常考&必考之--js数组排序冒泡排序和快速排序

    冒泡排序: 原理:比较相邻的元素,将值大的元素交换到右边.(如果相等不进行交换) 实例: 要排列数组:[10,1,35,61,89,36,55] 第一趟排序: 第1次排序:10和1比较,10>1 ...

  7. 寻找的常用webstorm快捷键

    1. 必备快捷键 Ctrl+/:注释当前行 Ctrl+Shift+/:当前位置插入注释 Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的 Ctrl+Shift+A:选择当前标签前后,修 ...

  8. POJ 1434 Fill the Cisterns! (模拟 or 二分)

    Fill the Cisterns! 题目链接: http://acm.hust.edu.cn/vjudge/contest/129783#problem/F Description During t ...

  9. 《SQL Server 2012 T-SQL基础》读书笔记 - 3.联接查询

    Chapter 3 Joins Cross Joins(交叉联接)就是返回两个表的笛卡尔积(m行的表cross join一个n行的表得到一个m * n行的结果),它有两种标准SQL语法,第一种: SE ...

  10. react-native 组件之间传值

    1.通过 AsyncStorage 将值保存在本地(最低端的方法) import { AsyncStorage, } from 'react-native'; // 保存 IP AsyncStorag ...