利用vue,bootstrap制作简单的列表展示,添加和删除功能

news/2024/7/10 1:38:18 标签: vue, 前端, bootstarp, 列表

实现效果如下图所示:

添加按钮直接添加

删除按钮可以删除

其中的知识点有:bootstrap运用,v-model,@keyup,@click,全局过滤器,私有过滤器,自定义全局按键修饰符,Vue.directive() 定义全局指令,自定义一个颜色的指令等一些知识点,大家可以参考参考,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Document</title>
	<script src="https://unpkg.com/vue/dist/vue.js"></script>
	<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
	<div id="app">
		<div class="panel panel-primary">
			<div class="panel-heading">
				<h3 class="panel-title">添加品牌</h3>
			</div>
			<div class="panel-body form-inline">
				<label>
					Id:
					<input type="text" class="form-control" v-model="id">
				</label>

				<label>
					Name:
					<input type="text" class="form-control" v-model="name" @keyup.enter="add">
				</label>

				<input type="button" value="添加" class="btn btn-primary" @click="add">

				<label>
					搜索名称关键字:
					<input type="text" class="form-control" v-model="keywords" id ="search" v-focus v-color="'blue'">
				</label>

			</div>
		</div>


		<table class="table table-bordered table-hover table-striped">
			<thead>
				<tr>
					<th>Id</th>
					<th>Name</th>
					<th>Ctime</th>
					<th>Operation</th>
				</tr>
			</thead>
			<tbody>
				<tr v-for="item in search(keywords)" :key="item.id">
					<td>{{ item.id }}</td>
					<td v-text="item.name"></td>
					<td>{{ item.ctime | dateFormat}}</td>
					<td>
						<a href="" @click.prevent="del(item.id)">删除</a>
					</td>
				</tr>
			</tbody>
		</table>
	</div>

	<div id="app2">
		<h3 class="text-danger" v-fontweight="600" v-fontsize="30">{{ dt | dateFormat }}</h3>
	</div>


	<script>
		// 全局的过滤器,进行时间的格式化
		Vue.filter('dateFormat', function(dateStr, pattern="") {
			var dt = new Date(dateStr)

			//  yyyy-mm-dd
			var y = dt.getFullYear()
			var m = dt.getMonth() + 1
			var d = dt.getDate()

			// return y + '-' + m + '-' + d

			if(pattern && pattern.toLowerCase() === 'yyyy-mm-dd'){
				return `${y}-${m}-${d}`
			} else {
				var hh = dt.getHours()
				var mm = dt.getMinutes()
				var ss = dt.getSeconds()

				return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
			}
			
		})

		//自定义全局按键修饰符
		// Vue.config.keyCodes.f2 = 113

		// 使用  Vue.directive() 定义全局的指令
		Vue.directive('focus', {
			bind: function (el) {  //每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次
				// el.focus()
			},
			inserted: function (el) {  //inserted 表示元素 插入到DOM中的时候,会执行insterted函数
				el.focus()

			},
			updated: function () {  //当VNode更新的时候,会执行updated,可能会触发多次

			},
		})

		//自定义一个颜色的指令
		Vue.directive('color', {
			bind: function(el, binding){
				el.style.color = binding.value

			}
		})


		//创建 Vue 实例,得到ViewModel
		var vm = new Vue({
			el: '#app',
			data:{
				id: '',
				name: '',
				keywords: '',  //搜索关键字
				list: [
					{ id: 1, name: '奔驰', ctime: new Date() },
					{ id: 2, name: '宝马', ctime: new Date() }
				]
			},
			methods:{
				add(){
					// console.log(this.id);
					// console.log(this.name);
					var car = { id: this.id, name: this.name, ctime: new Date() }
					this.list.push(car)
					this.id = this.name = ''
				},
				del(id){  //根据id删除数据

					// 方法一
					/*this.list.some((item, i)=>{
						if(item.id === id){
							this.list.splice(i, 1)
							return true;
						}
					})*/

					//方法二
					var index = this.list.findIndex(item => {
						if(item.id === id){
							return true;
						}
					})

					// console.log(index);
					this.list.splice(index, 1)
				},
				search(keywords) {

					//方法一
					/*var newList = []
					this.list.forEach( item=> {
						if(item.name.indexOf(keywords) != -1) {
							newList.push(item)
						}
					})
					return newList*/

					//方法二
					return this.list.filter(item => {
						// if(item.name.indexOf(keywords) != -1)
						if(item.name.includes(keywords)){
							return item
						}
					})
					return newList
				}
			}
		})

		var vm2 = new Vue({
			el: "#app2",
			data: {
				dt: new Date()
			},
			methods: {},
			filters: {  //定义私有过滤器   过滤器有两个 条件  【过滤器名称 和 处理函数】
				dateFormat:function(dateStr, pattern){
					var dt = new Date(dateStr)

					//  yyyy-mm-dd
					var y = dt.getFullYear()
					var m = (dt.getMonth() + 1).toString().padStart(2, '0')
					var d = dt.getDate().toString().padStart(2, '0')

					// return y + '-' + m + '-' + d

					if(pattern && pattern.toLowerCase() === 'yyyy-mm-dd'){
						return `${y}-${m}-${d}`
					} else {
						var hh = dt.getHours().toString().padStart(2, '0')
						var mm = dt.getMinutes().toString().padStart(2, '0')
						var ss = dt.getSeconds().toString().padStart(2, '0')

						return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~~~~~`
					}
				}
			},
			directives:{ //自定义私有指令
				'fontweight': {  //设置字体粗细的
					bind: function(el, binding){
						el.style.fontWeight = binding.value

					}
				},
				'fontsize': function(el, binding){
					el.style.fontSize = parseInt(binding.value) + 'px'
				}
			}

		})

	</script>
</body>
</html>

演示网站效果地址:http://hyc5.cn/list.html


http://www.niftyadmin.cn/n/1466654.html

相关文章

vue使用钩子函数制作动画

vue使用钩子函数制作简单动画效果&#xff0c;代码如下&#xff0c;仅供参考交流&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

js中=,==,===的区别和使用

js中 是赋值的意思&#xff0c;让左边的值等于右边的值 是判断等于的意思&#xff0c;返回值是一个布尔值&#xff0c;它只判断值是否相等&#xff0c;不判断类型是否一样 也是判断等于的意思&#xff0c;返回值也是一个布尔值&#xff0c;但是它不仅仅判断值是否相等&#xff…

移动端解决点击300ms延迟问题

在页面中加上如下代码&#xff1a; <!-- 下面这段Js是为了解决移动端点击300ms延迟问题 --><script src"https://as.alipayobjects.com/g/component/fastclick/1.0.6/fastclick.js"></script><script>if (addEventListener in document) {d…

vue项目proxyTable配置和部署服务器的问题

在localhost环境下跑项目时&#xff0c;接口地址是 http://xxxx.com/save/index 这样的接口地址&#xff0c;我们这样直接使用会存在跨域的请求&#xff0c;导致接口请求不成功&#xff0c;我们进入 config/index.js 代码下如下配置即可。 dev: {// 静态资源文件夹assetsSubDi…

vue 生命周期 详解

先来看看vue官网对vue生命周期的介绍 Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程&#xff0c;我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程&#xff0c;就是生命周期。 …

stylus的基本用法

1.语法 Stylus的语法花样多一些&#xff0c;它使用“.styl”的扩展名&#xff0c;Stylus也接受标准的CSS语法&#xff0c;但是他也接受不带花括号和分号的语法&#xff0c;如下所示&#xff1a; /* style.styl */ h1 {color: #0982C1; } /* 省略花括号 */ h1color: #0982C1; …

es7中Async/await学习

Async/await 有一种特殊的语法可以更舒适地与promise协同工作&#xff0c;它叫做async/await&#xff0c;它是非常的容易理解和使用。 Async functions 让我们先从async关键字说起&#xff0c;它被放置在一个函数前面。就像下面这样&#xff1a; async function f() {retur…

解决 linux 下安装 node 报: command not found

注意&#xff1a;有时安装成功后,需要关闭xshell&#xff0c;重新启动。nvm才会生效。 首先是在linux下安装node的问题&#xff1a; 查了很多人安装方法&#xff0c;也试过了&#xff0c;就是下载完node的压缩包&#xff0c;在linux服务器下解压&#xff0c;进入到bin目录就可…