一、渲染品牌列表

<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">
</label>
<!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了 -->
<input type="button" value="添加" class="btn btn-primary" @click="add()">
</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 list" :key="item.id">
<td>{{ item.id }}</td>
<td>{{item.name}}</td>
<td>{{ item.ctime }}</td>
<td>
<a href="">删除</a>
</td>
</tr>
</tbody>
</table>
</div>
<script>
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {
id: '',
name: '',
list: [
{ id: 1, name: '黄焖鸡', ctime: new Date() },
{ id: 2, name: '烤鱼', ctime: new Date() },
{ id: 3, name: '鸭血粉丝' ,ctime: new Date()},
{ id: 4, name: '大碗米线' ,ctime: new Date()},
]
},
methods:{
add(){
this.list.push({id:this.id,name:this.name,ctime:new Date()})
} }
});
</script>

来吧展示:

二、实现删除功能

  1. 阻止a链接默认跳转行为,并添加del事件,传递参数id
 <a href="" @click.prevent="del(item.id)">删除</a>
  1. 添加del()方法

    测试一下del()方法
del(id){
console.log(id)
}



方法一:

del(id){
// console.log(id)
//分析业务逻辑
//1,根据拿到的商品id,找到对应的商品商品索引
//2.找到对应的索引值,取数组中,调用splice()方法删除对应的元素
for(var i=0;i<this.list.length;i++){
if(this.list[i].id == id ){
this.list.splice(i,1)
break
}
}

方法二:

del(id){
var index = this.list.findIndex(function (item,i,arr) {
return item.id = id
})
this.list.splice(index,1)
}

来吧展示:

三、实现搜索功能

  1. 创建搜索框,并进行双向数据绑定
<input type="button" value="添加" class="btn btn-primary" @click="add()">
<label>
搜索名称关键字:
<input type="text" class="form-control" v-model="keywords">
</label>
  1. 给文本框增加一个change事件去监听文本框的值的变化,并拿到搜索的关键字
<input type="text" class="form-control" v-model="keywords" @change="searchByName()">
searchByName(){
console.log(this.keywords)
}

测试:



3. 进行搜索框keywords的匹配渲染

 <tr v-for="item in searchByName()" :key="item.id">

list在这里是一个si数据,可以在这传入一个函数

item in 这个方法的返回值

先调用这个函数,变成一个返回值,然后让item 读出来然后渲染出来

如果在serchByName()中return 一个数组

searchByName(){
// console.log('ok')
// console.log(this.keywords)
return [
{ id: 1, name: '黄焖鸡', ctime: new Date() },
{ id: 2, name: '烤鱼', ctime: new Date() }
]
}

页面的数据不再是list中的数据,而是searchByName return出来的数据



动态去创建return 的返回值

方法一:indexOf()方法

 searchByName(){
// console.log('ok')
// console.log(this.keywords)
// return [
// { id: 1, name: '黄焖鸡', ctime: new Date() },
// { id: 2, name: '烤鱼', ctime: new Date() }
// ]
var result = []
//遍历循环list
for(var i = 0;i<this.list.length;i++){
if(this.list[i].name.indexOf(this.keywords) !== -1){
//如果搜索框的keywords
// console.log(this.list[i].name)
// 拿到的是所有list.name
//与搜索框中的keywords进行对比,
// 如果 == 0说明存在下标为0的数据 则渲染keywords
//=0 的情况有:
// 1.存在下标为0的数据,存在就渲染keywords
//2. ‘’为空,为空就渲染list
// 如果 == -1 说明不存在这个数据,即没有keywords也没有list中的数据
result.push(this.list[i])
}
}
return result
}

indexOf()方法的使用:

方法二:inculdes()方法

 searchByName(){
var result = []
for(var i = 0;i<this.list.length;i++){
if(this.list[i].name.includes(this.keywords)) result.push(this.list[i])
}
return result
}

includes()方法的使用:



方法三:

searchByName(){
// var newArr = this.list.filter(function (item) {
//有this指向的问题,所以要更改成箭头函数
var newArr = this.list.filter((item) => {
return item.name.includes(this.keywords)
//return 一个 ture 那么item对象就会放到新数组中去
})
return newArr
}

数组的fiter()方法:作用是循环指定的数组

并把满足回调函数中的指定条件的项返回,从而得到一个新数组

来吧展示:

四、格式化时间

1. 方法一:

2. 方法二:结合过滤器和moment去处理时间

  1. 安装moment

  2. 导入moment文件

<script src="node_modules/moment/min/moment.min.js"></script>
  1. 在创建时间的后面添加一个管道符和即将要进行过滤的名称
<tr v-for="item in searchByName()" :key="item.id">
<td>{{ item.id }}</td>
<td>{{item.name}}</td>
<td>{{ item.ctime | filterctime}}</td>
<td>
<a href="" @click.prevent="del(item.id)">删除</a>
</td>
</tr>
  1. 在vm实例之前去定义一个全局过滤器
Vue.filter('filterctime',function () {
return moment().format('YYYY-MM-DD HH:mm:ss')
})
var vm = new Vue({
........
})

来吧展示:

五、按下enter键自己田间事件(使用按键修饰符)

官方文档:vue中按键修饰符的使用

<label>
Name:
<input type="text" class="form-control" v-model="name" @keyup.enter="add()">
<!-- 只有键盘抬起,并且按的是回车键的时候才会触发add事件-->
</label>

来吧展示:

五、全局自定义指令去获取文本框的焦点

官方文档:https://cn.vuejs.org/v2/guide/custom-directive.html

bind:function (el) {
console.log(el)
},

bind:function (el) {
console.log(el)
//在这里el.focus()没有生效
// el.focus()
el.style.color="red"
//el.style.color="red"生效了,原因是一个时机的问题,样式不管时机,行为要注意时机的问题,只有有样式,浏览器肯定会去执行,样式只有有,就会被解析 }

说明想要el.focus()生效,必须先插入到文档中才能生效

Vue.directive('focus',{
//指令绑定到的元素,被Vue实例解析的时候,就会立即执行bind()函数
bind:function (el) {
console.log(el)
// el.focus()
el.style.color="red" // 想要el.focus()生效,必须先插入到文档中才能生效 },
inserted:function (el) {
//调用机制:当指令绑定到的元素,被插入到文档的父节点时候,调用inserted函数
// JS DOM API原生方法
//既然已经在页面上渲染了,那么必然就可以获取到焦点
//行为与样式不一样,只是一瞬间的事情
//所以JS的行为最好写到inerted中去
el.focus()
}
})

总结:

在自定义指令的时候,如果需要操作元素的JS行为,最好写到inserted()去中

如果要操作元素的样式,最好写到bind中去

六、自定义指令 更改颜色样式v- color

  1. 方法一:直接在bind中去自定义写入样式
 <input type="button" value="添加" class="btn btn-primary"
@click="add()" v-color>
Vue.directive('color',{
bind:function (el,binding) {
el.style.color="pink"
},
inserted:function (el) {
}
})

来吧展示:



2. 在v-color中传入颜色的值

 <input type="button" value="添加" class="btn btn-primary"
@click="add()" v-color="red">
    Vue.directive('color',{
bind:function (el,binding) {
//默认如果在v-color中传入了颜色值,那么就显示传入的值,如果没有传,默认是pink
el.style.color=binding.expression || 'pink'
// console.log(binding)
// console.log(binding.expression)
// console.log(binding.value)
},
inserted:function (el) {
}
})

来吧展示:

七、在实例对象中自定义指令 更改颜色样式v- color

<td>
<a href="" @click.prevent="del(item.id)" v-style>删除</a>
</td>
methods:{...}
filters:{},
directives:{
style:{
bind(el,binding){
el.style.fontStyle = 'italic'
},
inserted(el){
}
}
}

vue学习笔记(一) ----- vue指令(菜单列表案例)的更多相关文章

  1. 【Vue学习笔记】—— vue的基础语法 { }

    学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...

  2. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  3. vue学习笔记:vue的认识与特点与获取

    Vue了解 Vue:读作 view Vue是一个渐进式框架 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...

  4. vue学习笔记(五)条件渲染和列表渲染

    前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...

  5. Vue学习笔记之Vue指令系统介绍

    所谓指令系统,大家可以联想咱们的cmd命令行工具,只要我输入一条正确的指令,系统就开始干活了. 在vue中,指令系统,设置一些命令之后,来操作我们的数据属性,并展示到我们的DOM上. OK,接下来我们 ...

  6. vue学习笔记—bootstrap+vue用户管理

    vue,读音view,简单易用的前端框架.特点如下: 1.一个mvvm的前端框架,内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2.中国人尤雨溪维护的个人项目,中文资料多,和go ...

  7. Vue学习笔记之Vue知识点补充

    0x00 修饰符 .lazy 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 .你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步: &l ...

  8. Vue学习笔记之Vue学习前的准备工作

    0x00 起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐 ...

  9. VUE学习笔记之vue cli 构建项目

    一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...

  10. Vue学习笔记之Vue组件

    0x00 前言 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例 ...

随机推荐

  1. Python基础之模块:3、os模块 sys模块 json模块 json实战

    目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...

  2. 死磕面试系列,Java到底是值传递还是引用传递?

    Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...

  3. vue3中使用computed

    演示示例(vant组件库的轮播图): <van-swipe :loop="false" :width="150" class="my-Swipe ...

  4. mybatis sql批量插入

    insert into jrqf_officialcard (id, budget_unit, money_purpose, economic_type, money, func_subject_na ...

  5. SSH ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor

    修改struts.xml配置:struts.devMode value="false" <constant name="struts.devMode" v ...

  6. c++ trivial, standard layout和POD类型解析

    目录 1. trivial类型 2. standard layout类型 3. 集大成者,POD(Plain Old Data)类型 4. 测试代码 1. trivial类型 占用一片连续的内存,编译 ...

  7. ChatGPT 可以联网了!浏览器插件下载

    Twitter 用户 An Qu 开发了一款新的 Chrome 插件帮助 ChatGPT 上网,安装插件以后 ChatGPT 就可以联!网!了! 简单来说开启插件后,他可以从网上搜索信息,并且根据用户 ...

  8. 使用浏览器inspect调试app

    使用浏览器inspect调试app 在开发混合项目的过程中,常常需要在app环境排查问题,接口可以使用fiddler等工具来抓包,但是js错误就不好抓包了,这里介绍一种调试工具-浏览器. 1.调试过程 ...

  9. 使用Springboot+redis+Vue实现秒杀的一个Demo

    目录 1.Redis简介 2.实现代码 3.启动步骤 4.使用ab进行并发测试 5.线程安全 6.总结 7.参考资料 1.Redis简介 Redis是一个开源的key-value存储系统. Redis ...

  10. ssm——springMVC整理

    目录 1.概念 1.1.什么是SpringMVC 1.2.B/S架构 1.3.MVC结构 1.4.Spring MVC常用名词 1.5.常用注解 1.6.rest和restfull 1.7.Reque ...