渐进式框架 – Vue.js
前后端分离开发(前端渲染)必选框架。
快速上手
- 引入Vue的JavaScript文件,我们仍然推荐从CDN服务器加载它。
| 1 | <script src="https://cdn.jsdelivr.net/npm/vue"></script> | 
- 数据绑定(声明式渲染 )。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <div id="app"> 	<h1>{{ product }}库存信息</h1> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> 	const app = new Vue({ 		el: '#app', 		data: { 			product: 'iPhone X' 		} 	}); </script> | 
- 条件与循环。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <div id="app"> 	<h1>库存信息</h1>     <hr> 	<ul> 		<li v-for="product in products"> 			{{ product.name }} - {{ product.quantity }} 			<span v-if="product.quantity === 0"> 				已经售罄 			</span> 		</li> 	</ul> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> 	const app = new Vue({ 		el: '#app', 		data: { 			products: [ 				{"id": 1, "name": "iPhone X", "quantity": 20}, 				{"id": 2, "name": "华为 Mate20", "quantity": 0}, 				{"id": 3, "name": "小米 Mix3", "quantity": 50} 			] 		} 	}); </script> | 
- 计算属性。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <div id="app"> 	<h1>库存信息</h1> 	<hr> 	<ul> 		<li v-for="product in products"> 			{{ product.name }} - {{ product.quantity }} 			<span v-if="product.quantity === 0"> 				已经售罄 			</span> 		</li> 	</ul> 	<h2>库存总量:{{ totalQuantity }}台</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> 	const app = new Vue({ 		el: '#app', 		data: { 			products: [ 				{"id": 1, "name": "iPhone X", "quantity": 20}, 				{"id": 2, "name": "华为 Mate20", "quantity": 0}, 				{"id": 3, "name": "小米 Mix3", "quantity": 50} 			] 		}, 		computed: { 			totalQuantity() { 				return this.products.reduce((sum, product) => { 					return sum + product.quantity 				}, 0); 			} 		} 	}); </script> | 
- 处理事件。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <div id="app"> 	<h1>库存信息</h1> 	<hr> 	<ul> 		<li v-for="product in products"> 			{{ product.name }} - {{ product.quantity }} 			<span v-if="product.quantity === 0"> 				已经售罄 			</span> 			<button @click="product.quantity += 1"> 				增加库存 			</button> 		</li> 	</ul> 	<h2>库存总量:{{ totalQuantity }}台</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> 	const app = new Vue({ 		el: '#app', 		data: { 			products: [ 				{"id": 1, "name": "iPhone X", "quantity": 20}, 				{"id": 2, "name": "华为 Mate20", "quantity": 0}, 				{"id": 3, "name": "小米 Mix3", "quantity": 50} 			] 		}, 		computed: { 			totalQuantity() { 				return this.products.reduce((sum, product) => { 					return sum + product.quantity 				}, 0); 			} 		} 	}); </script> | 
- 用户输入。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <div id="app"> 	<h1>库存信息</h1> 	<hr> 	<ul> 		<li v-for="product in products"> 			{{ product.name }} -  			<input type="number" v-model.number="product.quantity" min="0"> 			<span v-if="product.quantity === 0"> 				已经售罄 			</span> 			<button @click="product.quantity += 1"> 				增加库存 			</button> 		</li> 	</ul> 	<h2>库存总量:{{ totalQuantity }}台</h2> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> 	const app = new Vue({ 		el: '#app', 		data: { 			products: [ 				{"id": 1, "name": "iPhone X", "quantity": 20}, 				{"id": 2, "name": "华为 Mate20", "quantity": 0}, 				{"id": 3, "name": "小米 Mix3", "quantity": 50} 			] 		}, 		computed: { 			totalQuantity() { 				return this.products.reduce((sum, product) => { 					return sum + product.quantity 				}, 0); 			} 		} 	}); </script> | 
- 通过网络加载JSON数据。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <div id="app"> 	<h2>库存信息</h2> 	<ul> 		<li v-for="product in products"> 			{{ product.name }} - {{ product.quantity }} 			<span v-if="product.quantity === 0"> 				已经售罄 			</span> 		</li> 	</ul> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> 	const app = new Vue({ 		el: '#app', 		data: { 			products: [] 		}, 		created() { 			fetch('https://jackfrued.top/api/products') 				.then(response => response.json()) 				.then(json => { 					this.products = json 				}); 		} 	}); </script> | 
使用脚手架 – vue-cli
Vue为商业项目开发提供了非常便捷的脚手架工具vue-cli,通过工具可以省去手工配置开发环境、测试环境和运行环境的步骤,让开发者只需要关注要解决的问题。
- 安装脚手架。
- 创建项目。
- 安装依赖包。
- 运行项目。
UI框架 – Element
基于Vue 2.0的桌面端组件库,用于构造用户界面,支持响应式布局。
- 引入Element的CSS和JavaScript文件。
| 1 2 3 4 | <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> | 
- 一个简单的例子。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <!DOCTYPE html> <html> 	<head> 		<meta charset="UTF-8"> 		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> 	</head> 	<body> 		<div id="app"> 			<el-button @click="visible = true">点我</el-button> 			<el-dialog :visible.sync="visible" title="Hello world"> 				<p>开始使用Element吧</p> 			</el-dialog>             </div> 	</body> 	<script src="https://unpkg.com/vue/dist/vue.js"></script> 	<script src="https://unpkg.com/element-ui/lib/index.js"></script> 	<script> 		new Vue({ 			el: '#app', 			data: { 				visible: false, 			} 		}) 	</script> </html> | 
- 使用组件。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <!DOCTYPE html> <html> 	<head> 		<meta charset="UTF-8"> 		<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> 	</head> 	<body> 		<div id="app"> 			<el-table :data="tableData" stripe style="width: 100%"> 				<el-table-column prop="date" label="日期" width="180"> 				</el-table-column> 				<el-table-column prop="name" label="姓名" width="180"> 				</el-table-column> 				<el-table-column prop="address" label="地址"> 				</el-table-column> 			</el-table> 		</div> 	</body> 	<script src="https://unpkg.com/vue/dist/vue.js"></script> 	<script src="https://unpkg.com/element-ui/lib/index.js"></script> 	<script> 		new Vue({ 			el: '#app', 			data: { 				tableData:  [ 					{ 						date: '2016-05-02', 						name: '王一霸', 						address: '上海市普陀区金沙江路 1518 弄' 					},  					{ 						date: '2016-05-04', 						name: '刘二狗', 						address: '上海市普陀区金沙江路 1517 弄' 					},  					{ 						date: '2016-05-01', 						name: '杨三萌', 						address: '上海市普陀区金沙江路 1519 弄' 					},  					{ 						date: '2016-05-03', 						name: '陈四吹', 						address: '上海市普陀区金沙江路 1516 弄' 					} 				] 			} 		}) 	</script> </html> | 
报表框架 – ECharts
百度出品的开源可视化库,常用于生成各种类型的报表。
基于弹性盒子的CSS框架 – Bulma
Bulma是一个基于Flexbox的现代化的CSS框架,其初衷就是移动优先(Mobile First),模块化设计,可以轻松用来实现各种简单或者复杂的内容布局,即使不懂CSS的开发者也能够使用它定制出漂亮的页面。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <!DOCTYPE html> <html lang="en"> <head> 	<meta charset="UTF-8"> 	<title>Bulma</title> 	<link href="https://cdn.bootcss.com/bulma/0.7.4/css/bulma.min.css" rel="stylesheet"> 	<style type="text/css"> 		div { margin-top: 10px; } 		.column { color: #fff; background-color: #063; margin: 10px 10px; text-align: center; } 	</style> </head> <body> 	<div class="columns"> 		<div class="column">1</div> 		<div class="column">2</div> 		<div class="column">3</div> 		<div class="column">4</div> 	</div> 	<div> 		<a class="button is-primary">Primary</a> 		<a class="button is-link">Link</a> 		<a class="button is-info">Info</a> 		<a class="button is-success">Success</a> 		<a class="button is-warning">Warning</a> 		<a class="button is-danger">Danger</a> 	</div> 	<div> 		<progress class="progress is-danger is-medium" max="100">60%</progress> 	</div> 	<div> 		<table class="table is-hoverable"> 			<tr> 				<th>One</th> 				<th>Two</th> 			</tr> 			<tr> 				<td>Three</td> 				<td>Four</td> 			</tr> 			<tr> 				<td>Five</td> 				<td>Six</td> 			</tr> 			<tr> 				<td>Seven</td> 				<td>Eight</td> 			</tr> 			<tr> 				<td>Nine</td> 				<td>Ten</td> 			</tr> 			<tr> 				<td>Eleven</td> 				<td>Twelve</td> 			</tr> 		</table> 	</div> </body> </html> | 
响应式布局框架 – Bootstrap
用于快速开发Web应用程序的前端框架,支持响应式布局。
- 特点
- 支持主流的浏览器和移动设备
- 容易上手
- 响应式设计
 
- 内容
- 网格系统
- 封装的CSS
- 现成的组件
- JavaScript插件
 
- 可视化
本文来自这个系列长期转载Python-100-Days ,本文观点不代表蓝洛水深立场,转载请联系原作者。
 
                

 微信扫一扫
                                                            微信扫一扫                                                     支付宝扫一扫
                                                            支付宝扫一扫                                                     
            