UNPKG

4.18 kBMarkdownView Raw
1## 语法规范
2
3Mock.js 的语法规范包括两部分:
4
51. 数据模板定义(Data Temaplte Definition,DTD)
62. 数据占位符定义(Data Placeholder Definition,DPD)
7
8### 数据模板定义 DTD
9
10**数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:**
11
12 // 属性名 name
13 // 生成规则 rule
14 // 属性值 value
15 'name|rule': value
16
17**注意:**
18
19* 属性名 和 生成规则 之间用 `|` 分隔。
20* 生成规则 是可选的。
21* 生成规则 有 7 种格式:
22 1. `'name|min-max': value`
23 1. `'name|count': value`
24 1. `'name|min-max.dmin-dmax': value`
25 1. `'name|min-max.dcount': value`
26 1. `'name|count.dmin-dmax': value`
27 1. `'name|count.dcount': value`
28 1. `'name|+step': value`
29* **生成规则 的 含义 需要依赖 属性值 才能确定。**
30* 属性值 中可以含有 `@占位符`
31* 属性值 还指定了最终值的初始值和类型。
32
33<!-- 感谢 @麦少 同学对 Mock.js 语法的整理和分析,才有了这版相对清晰的语法文档。 -->
34
35**生成规则和示例:**
36
371. 属性值是字符串 **String**
38 1. `'name|min-max': 'value'` 通过重复 `'value'` 生成一个字符串,重复次数大于等于 `min`,小于等于 `max`
39 2. `'name|count': 'value'` 通过重复 `'value'` 生成一个字符串,重复次数等于 `count`
402. 属性值是数字 **Number**
41 1. `'name|+1': 100` 属性值自动加 1,初始值为 100
42 2. `'name|1-100': 100` 生成一个大于等于 1、小于等于 100 的整数,属性值 100 只用来确定类型。
43 3. `'name|1-100.1-10': 100` 生成一个浮点数,整数部分大于等于 1、小于等于 100,小数部分保留 1 到 10 位。
44
45 {
46 'number1|1-100.1-10': 1,
47 'number2|123.1-10': 1,
48 'number3|123.3': 1,
49 'number4|123.10': 1.123
50 }
51 // =>
52 {
53 "number1": 12.92,
54 "number2": 123.51,
55 "number3": 123.777,
56 "number4": 123.1231091814
57 }
583. 属性值是布尔型 **Boolean**
59 1. `'name|1': value` 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率是 1/2。
60 2. `'name|min-max': value` 随机生成一个布尔值,值为 `value` 的概率是 `min / (min + max)`,值为 `!value` 的概率是 `max / (min + max)`
614. 属性值是对象 **Object**
62 1. `'name|min-max': {}` 从属性值 `{}` 中随机选取 `min``max` 个属性。
63 2. `'name|count': {}` 从属性值 `{}` 中随机选取 `count` 个属性。
645. 属性值是数组 **Array**
65 1. `'name|1': [{}, {} ...]` 从属性值 `[{}, {} ...]` 中随机选取 1 个元素,作为最终值。
66 2. `'name|min-max': [{}, {} ...]` 通过重复属性值 `[{}, {} ...]` 生成一个新数组,重复次数大于等于 `min`,小于等于 `max`
67 3. `'name|count': [{}, {} ...]` 通过重复属性值 `[{}, {} ...]` 生成一个新数组,重复次数为 `count`
686. 属性值是数组 **Function**
69
70 `'name': function(){}` 执行函数 `function(){}`,取其返回值作为最终的属性值,上下文为 `'name'` 所在的对象。
71
72### 数据占位符定义 DPD
73
74占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。占位符 的格式为:
75
76 @占位符
77 @占位符(参数 [, 参数])
78
79**注意:**
80
811. `@` 来标识其后的字符串是 占位符。
822. 占位符 引用的是 `Mock.Random` 中的方法。
833. 通过 `Mock.Random.extend()` 来扩展自定义占位符。
844. 占位符 也可以引用 数据模板 中的属性。
855. 占位符 会优先引用 数据模板 中的属性。
86
87 {
88 name: {
89 first: '@FIRST',
90 middle: '@FIRST',
91 last: '@LAST',
92 full: '@first @middle @last'
93 }
94 }
95 // =>
96 {
97 "name": {
98 "first": "Charles",
99 "middle": "Brenda",
100 "last": "Lopez",
101 "full": "Charles Brenda Lopez"
102 }
103 }
104
105---