Skip to content

Commit 2a8f549

Browse files
committed
add ppt.md
1 parent f6c8f4e commit 2a8f549

3 files changed

Lines changed: 146 additions & 0 deletions

File tree

form/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

form/.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.md

form/ppt.md

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
title: form 表单校验剖析
2+
speaker: 吴军
3+
plugins:
4+
- echarts
5+
6+
<slide class="bg-black-blue aligncenter" image="https://source.unsplash.com/C1HhAQrbykQ/ .dark">
7+
8+
# form 表单校验剖析 {.text-landing.text-shadow}
9+
10+
By 吴军 {.text-intro}
11+
12+
13+
<slide class="bg-black-blue aligncenter" image="https://source.unsplash.com/C1HhAQrbykQ/ .dark">
14+
15+
## 目录
16+
---
17+
18+
* 项目中的表单校验
19+
* provide / inject
20+
* emmiter(dispatch/broadcast )
21+
* async-validator
22+
* form表单校验
23+
24+
<slide class='size-50 aligncenter'>
25+
26+
#### 你的表单校验是否听话?
27+
28+
<slide>
29+
30+
31+
##### provide 和 inject 主要在开发高阶插件/组件库时使用。并不推荐用于普通应用程序代码中。
32+
33+
这对选项需要一起使用,以允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
34+
35+
36+
<slide :class="size-40 aligncenter">
37+
#### provide/inject
38+
---
39+
40+
```
41+
// 父级组件提供 'foo'
42+
var Provider = {
43+
provide: {
44+
foo: 'bar'
45+
},
46+
// ...
47+
}
48+
49+
// 子组件注入 'foo'
50+
var Child = {
51+
inject: ['foo'],
52+
created () {
53+
console.log(this.foo) // => "bar"
54+
}
55+
// ...
56+
}
57+
```
58+
59+
<slide :class="size-40 aligncenter">
60+
##### dispatch&broadcast
61+
---
62+
```
63+
function broadcast (componentName, eventName, params) {
64+
this.$children.forEach(child => {
65+
var name = child.$options.componentName;
66+
if (name === componentName) {
67+
child.$emit.apply(child, [eventName].concat(params));
68+
} else {
69+
broadcast.apply(child, [componentName, eventName].concat([params]));
70+
}
71+
});
72+
}
73+
export default {
74+
methods: {
75+
dispatch (componentName, eventName, params) {
76+
var parent = this.$parent || this.$root;
77+
var name = parent.$options.componentName;
78+
while (parent && (!name || name !== componentName)) {
79+
parent = parent.$parent;
80+
if (parent) {
81+
name = parent.$options.componentName;
82+
}
83+
}
84+
if (parent) {
85+
parent.$emit.apply(parent, [eventName].concat(params));
86+
}
87+
},
88+
broadcast (componentName, eventName, params) {
89+
broadcast.call(this, componentName, eventName, params);
90+
}
91+
}
92+
};
93+
```
94+
<slide :class="size-50 aligncenter">
95+
校验库
96+
97+
[async-validator](https://github.com/yiminghe/async-validator)
98+
99+
100+
<slide :class="size-50 aligncenter">
101+
102+
## form 表单组件
103+
---
104+
- ft-form
105+
- ft-form-item
106+
- ft-input
107+
108+
<slide :class="size-50 aligncenter">
109+
110+
## 效果
111+
112+
```
113+
<div>
114+
<ft-form ref="form" :model="form" :rules="rules">
115+
<ft-form-item label="name" prop="name">
116+
<ft-input v-model="form.name"></ft-input>
117+
</ft-form-item>
118+
<ft-form-item label="desc" prop="desc">
119+
<ft-input v-model="form.desc"></ft-input>
120+
</ft-form-item>
121+
<ft-form-item label="age" prop="age">
122+
<ft-input v-model="form.age"></ft-input>
123+
</ft-form-item>
124+
</ft-form>
125+
<el-button @click="submit">提交</el-button>
126+
</div>
127+
```
128+
129+
<slide :class="size-50 aligncenter">
130+
131+
## 两种触发方式
132+
---
133+
- form表单提交校验
134+
- 子组件 blur或change触发
135+
136+
137+
<slide :class="size-50 aligncenter">
138+
## form表单提交校验
139+
140+
<slide :class="size-50 aligncenter">
141+
## 子组件 blur或change触发
142+
143+
<slide :class="size-50 aligncenter">
144+
## 算了 直接上代码吧!

0 commit comments

Comments
 (0)