2929- 系统支持多语言切换
3030- 系统权限
3131
32- [ 登陆页效果] ( https://dk-lan.github.io/vue-erp/dist/index.html#/login )
33-
34- # 项目文件结构
35- - dist [ 构建目录]
36- - demo [ 知识点讲解案例]
37- - src [ ERP 源代码]
38- - assets [ 静态资源文件]
39- - components [ Vue 组件]
40- - router [ 路由配置]
41- - utils [ ajax]
42- - vuex [ store]
43-
4432# 技术点目录
45- - 认识 Vue
46- - 模版语法
47- - 计算属性
48- - 样式绑定
49- - 指令
50- - 组件
51- - 生命周期
52- - 路由
33+ - [ 认识 Vue] ( #vue )
34+ - [ 认识数据驱动模式] ( #dd )
35+ - [ 认识 MVVM 模式] ( #mvvm )
36+ - [ 模版语法] ( https://github.com/dk-lan/vue-erp/VueBasic/模版语法 )
5337
54- # 认识 Vue
38+ # 认识 Vue{vue}
5539关于 Vue 的描述有不少,不外乎都会拿来与 Angular 和 React 对比,同样头顶 MVVM 双向数据驱动设计模式光环的 Angular 自然被对比的最多,但到目前为止,Angular 在热度上已明显不及 Vue,性能已成为最大的诟病。
5640
5741在我看来,Vue 和 Angular 的对比有种早些年 Java 和 ASP.NET 的对比,对于开发者而言,ASP.NET 官方本身已实现好了大量的框架和功能,使用起来非常的方便快捷,同时也提供了无限的可扩展性,对比起 Java 而言,后者在本身框架和功能上都不及 ASP.NET,但同样都拥有无限的可扩展性,相比之下,本来 ASP.NET 很有一统天下的可能,但现实终归现实,ASP.NET 本身的框架和功能实现并没有换来多少称赞,反在性能和安全性方面被诟病。回看 Vue 和 Angular 的阵营,我也总有这么一种感觉。
6751 })
6852```
6953
70- # 认识数据驱动模式
54+ # 认识数据驱动模式{#dd}
7155开始接触前端编程的基本上都是先学习 DOM 节点操作,jQuery 在这一领域上一度成为了标准,所以在前端编程的领域中,jQuery 几乎是每个开发者的标配。随着前后端分离的成熟,产品或项目都趋于分布式部署,开发者已不满足于操作 DOM 节点, 设计模式便慢慢的被前端化。
7256
7357数据驱动的设计模式在思维逻辑上与 DOM 节点操作完全不一样。
9276
9377```
9478
95- # 认识 MVVM 模式
79+ # 认识 MVVM 模式{#mvvm}
9680M:Model,称之为数据模型,在前端以对象的形式表现。
9781``` javascript
9882 var data = {message: ' 我就是一个数据模型' }
@@ -105,257 +89,4 @@ V:View,视图,也就是 HTML
10589```
10690VM:ViewModel,就是连接数据和视图的桥梁,当 Model 发生改变的时候,ViewModel 便将数据映射到视图。
10791
108- 那么数据驱动模式和 MVVM 模式有什么关系,换句话说,MVVM 是数据驱动模式的一种实现,Vue 是 MVVM 的一种实现。
109-
110-
111- # 模版语法
112- 模版语法已成为前端在数据驱动模式上 V 层最好的实现。
113-
114- ## 插值
115- ``` html
116- <div id =" app" >
117- <!-- 文本 当对 data.message 发生改变时,对应插值的内容也会自动改变-->
118- <fieldset >
119- <legend >文本</legend >
120- <div >{{message}}</div >
121- </fieldset >
122-
123- <!-- 纯 HTML {{}} 这种形式最终会被解释成文本,如果要想输入 HTML 结构,使用要用到 v-html="对象"-->
124- <fieldset >
125- <legend >纯 HTML</legend >
126- <div v-html =" rawHtml" ></div >
127- </fieldset >
128-
129- <!-- 属性 元素的任意属性(包含自定义属性)都可以和对象绑定 :属性名(或者 v-bind:属性名)=“对象”-->
130- <fieldset >
131- <legend >属性</legend >
132- <img :src =" src" alt =" " />
133- <img v-bind:src =" '../imgs/red.jpg'" alt =" " />
134- </fieldset >
135-
136- <!-- js 表达式 {{}} 可以用来解释 js 的表达式-->
137- <fieldset >
138- <legend >js 表达式</legend >
139- <div >{{1 + 1}}</div >
140- <div >{{status ? 'YES' : 'NO'}}</div >
141- <div >{{message.split('').reverse().join('')}}</div >
142- </fieldset >
143- </div >
144- ```
145-
146- ``` javascript
147- var vm = new Vue ({
148- el: ' #app' ,
149- data: {
150- message: ' 我是文本' ,
151- rawHtml: ' <h1>我是 h1 标签</h1>' ,
152- src: ' ../imgs/green.jpg' ,
153- status: true ,
154- }
155- })
156- ```
157- [ 插值效果] ( https://dk-lan.github.io/vue-erp/dist/demo/%E6%A8%A1%E7%89%88%E8%AF%AD%E6%B3%95/%E6%8F%92%E5%80%BC-%E6%96%87%E6%9C%AC.html )
158-
159- ## 缩写
160- ### v-bind 缩写
161- ``` html
162- <!-- 完整写法-->
163- <img v-bind:src =" '../imgs/red.jpg'" alt =" " />
164- <!-- 缩写-->
165- <img :src =" src" alt =" " />
166- ```
167- ### v-on 缩写
168- ``` html
169- <!-- 完整语法-->
170- <button v-on:click =" greet" >Greet</button >
171- <!-- 缩写语法-->
172- <button @click =" greet" >Greet</button >
173- ```
174-
175- ## 指令
176- 指令(Directive),换句话说就是元素的自定义属性,在 Vue 中是以 v- 为前缀的自定义属性,属性值为对象或 js 表达式
177-
178- <table >
179- <thead >
180- <tr>
181- <th>指令</th><th>类型</th><th>用法</th>
182- </tr>
183- </thead >
184- <tbody >
185- <tr><td>v-text</td><td>string</td><td><!--v-text-->
186-
187- ``` html
188- <span v-text =" msg" ></span >
189- <!-- 效果等同于-->
190- <!-- v-text 的权重高于 {{}}-->
191- <span >{{msg}}</span >
192- ```
193-
194- </td ></tr >
195- <tr><td>v-html</td><td>string</td><td><!--v-html-->
196-
197- ``` html
198- <div v-html =" html" ></div >
199- ```
200-
201- </td ></tr >
202- <tr><td>v-show</td><td>boolean</td><td><!--v-show-->
203-
204- ``` html
205- <!-- show 的值会直接影响 div 在文档中是否显示-->
206- <div v-show =" show" ></div >
207- ```
208-
209- </td ></tr >
210- <tr><td>v-if</td><td>boolean</td><td><!--v-if-->
211-
212- ``` html
213- <!-- status 的值会直接影响 div 在文档中是否存在-->
214- <div v-if =" status" ></div >
215- ```
216-
217- </td ></tr >
218- <tr><td>v-else-if</td><td>boolean</td><td><!--v-else-if-->
219-
220- ``` html
221- <div v-if =" flag == 1" >1</div >
222- <!-- 必须跟 v-if 或者 v-else-if 元素后面-->
223- <div v-else-if =" flag == 2" >2</div >
224- ```
225-
226- </td ></tr >
227- <tr><td>v-else</td><td>不需要表达式</td><td><!--v-else-->
228-
229- ``` html
230- <div v-if =" flag == 1" >1</div >
231- <div v-else-if =" flag == 2" >2</div >
232- <!-- 必须跟 v-if 或者 v-else-if 元素后面-->
233- <div v-else >2</div >
234- ```
235-
236- </td ></tr >
237- <tr><td>v-for</td><td>Array | Object | Number | String</td><td><!--v-for-->
238-
239- ``` html
240- <!--
241- data = 3
242- 结果会生成 3 个 div,
243- value 的值分类为 1, 2, 3
244- index 的值分别为 0, 1, 2
245- -->
246- <div v-for =" (value, index) in data" >
247- <span v-text =" value" ></span >
248- <span >{{index}}</span >
249- </div >
250- <!-- 也可以这样写-->
251- <div v-for =" value in data" >
252- <span v-text =" value" ></span >
253- </div >
254-
255- <!--
256- data = "abc"
257- 结果会生成 data.length 个 div,
258- value 的值分类为 a, b, c
259- index 的值分别为 0, 1, 2
260- -->
261- <div v-for =" (value, index) in data" >
262- <span v-text =" value" ></span >
263- <span >{{index}}</span >
264- </div >
265- <!-- 也可以这样写-->
266- <div v-for =" value in data" >
267- <span v-text =" value" ></span >
268- </div >
269-
270- <!--
271- data = {name: 'dk', age: 18}
272- 结果会生成 data 属性个数 个 div,
273- value 的值分类为 dk, 18
274- key 的值分别为 name, age
275- -->
276- <div v-for =" (value, key) in data" >
277- <span v-text =" key" ></span >
278- <span >{{value}}</span >
279- </div >
280- <!-- 也可以这样写-->
281- <div v-for =" value in data" >
282- <span v-text =" value" ></span >
283- </div >
284-
285- <!--
286- data = [{name: 'dk1', age: 18}, {name: 'dk2', age: 20}]
287- 结果会生成 data.length 个 div,
288- obj 的值分类为 data[0], data[1]
289- index 的值分别为0, 1
290- -->
291- <div v-for =" (obj, index) in data" >
292- <span v-text =" JSON.stringify(obj)" ></span >
293- <span >{{index}}</span >
294- </div >
295- <!-- 也可以这样写-->
296- <div v-for =" obj in data" >
297- <span v-text =" JSON.stringify(obj)" ></span >
298- </div >
299- ```
300-
301- </td ></tr >
302- <tr><td>v-on</td><td>Function</td><td><!--v-on-->
303-
304- ``` html
305- <!-- click事件直接绑定一个方法-->
306- <button v-on:click =" say1" >say1</button >
307- <!-- 缩写方式-->
308- <!-- click事件使用内联语句-->
309- <button @click =" say2('调用了 say2', $event)" >say2</button >
310- ```
311-
312- </td ></tr >
313- <tr><td>v-bind</td><td>Object</td><td><!--v-bind-->
314-
315- ``` html
316- <img v-bind:src =" 'imgs/red.jpg'" />
317- <!-- 缩写方式-->
318- <img :src =" 'imgs/yellow.jpg'" />
319- ```
320-
321- </td ></tr >
322- <tr><td>v-model</td><td>表单元素的值</td><td><!--v-model-->
323-
324- ``` html
325- <!-- 仅限于表单元素-->
326- <input type =" text" v-model =" mess" />
327- ```
328-
329- </td ></tr >
330- <tr><td>v-pre</td><td>不需要表达式</td><td><!--v-pre-->
331-
332- ``` html
333- <!-- {{}} 不编辑,当字符串输出-->
334- <span v-pre >{{mess}}</span >
335- ```
336-
337- </td ></tr >
338- <tr><td>v-cloak</td><td>不需要表达式</td><td><!--v-cloak-->
339-
340- ``` html
341- <!--
342- mess = 'abc'
343- span 还没被 vue 解析的时候会显示 {{mess}}
344- 解析后会显示 123
345- 用于解决这两个转换的过程不友好的显示
346- 尤其是在页面加载过慢的情况很容易出现这种情况
347- -->
348- <span v-cloak >{{mess}}</span >
349- ```
350-
351- </td ></tr >
352- <tr><td>v-once</td><td>不需要表达式</td><td><!--v-once-->
353-
354- ``` html
355- <!-- 内容只解释一次,当改变 mess 时不会再次映射到 span-->
356- <span v-once >{{mess}}</span >
357- ```
358-
359- </td ></tr >
360- </tbody >
361- </table >
92+ 那么数据驱动模式和 MVVM 模式有什么关系,换句话说,MVVM 是数据驱动模式的一种实现,Vue 是 MVVM 的一种实现。
0 commit comments