vue学习笔记(一) ----- vue指令(菜单列表案例)
一、渲染品牌列表
<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>
来吧展示:

二、实现删除功能
- 阻止a链接默认跳转行为,并添加del事件,传递参数id
<a href="" @click.prevent="del(item.id)">删除</a>
- 添加
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)
}
来吧展示:

三、实现搜索功能
- 创建搜索框,并进行双向数据绑定
<input type="button" value="添加" class="btn btn-primary" @click="add()">
<label>
搜索名称关键字:
<input type="text" class="form-control" v-model="keywords">
</label>
- 给文本框增加一个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去处理时间
安装moment

导入moment文件
<script src="node_modules/moment/min/moment.min.js"></script>
- 在创建时间的后面添加一个管道符和即将要进行过滤的名称
<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>
- 在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
- 方法一:直接在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指令(菜单列表案例)的更多相关文章
- 【Vue学习笔记】—— vue的基础语法 { }
学习笔记 作者:oMing vue v-on: 简称 @ <div id='app'> <button v-on:click='Show1'> </button> ...
- vue学习笔记(二)vue的生命周期和钩子函数
前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...
- vue学习笔记:vue的认识与特点与获取
Vue了解 Vue:读作 view Vue是一个渐进式框架 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...
- vue学习笔记(五)条件渲染和列表渲染
前言 在众多的编程语言中,我们的基础语法总是少不了一些专业语法,比如像定义变量,条件语句,for循环,数组,函数等等,vue.js这个优秀的前端框架中也有同样的语法,我们换一个名词,将条件语句改成专业 ...
- Vue学习笔记之Vue指令系统介绍
所谓指令系统,大家可以联想咱们的cmd命令行工具,只要我输入一条正确的指令,系统就开始干活了. 在vue中,指令系统,设置一些命令之后,来操作我们的数据属性,并展示到我们的DOM上. OK,接下来我们 ...
- vue学习笔记—bootstrap+vue用户管理
vue,读音view,简单易用的前端框架.特点如下: 1.一个mvvm的前端框架,内部做好了html中dom对象和后台用js语言定义的变量的双向绑定 2.中国人尤雨溪维护的个人项目,中文资料多,和go ...
- Vue学习笔记之Vue知识点补充
0x00 修饰符 .lazy 在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 .你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步: &l ...
- Vue学习笔记之Vue学习前的准备工作
0x00 起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐 ...
- VUE学习笔记之vue cli 构建项目
一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...
- Vue学习笔记之Vue组件
0x00 前言 vue的核心基础就是组件的使用,玩好了组件才能将前面学的基础更好的运用起来.组件的使用更使我们的项目解耦合.更加符合vue的设计思想MVVM. 那接下来就跟我看一下如何在一个Vue实例 ...
随机推荐
- JS常见问题总结
1. 什么是 JavaScript ? JavaScript 是一种具有面向对象的.解释型的.基于对象和事件驱动的.跨平台的.弱类型的程序设计语言 2. JavaScript 与 ECMAScript ...
- 关于ASP.NET Core WebSocket实现集群的思考
前言 提到WebSocket相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个TCP连接上进行全双工通讯的协议.在没有WebSocket之前只能通过浏览器到服务端的请求应答 ...
- hadoop配置day01
hadoop 安装jdk 配置文件: sudo vim /etc/profile 配置文件: export JAVA_HOME=/home/hadoop/jvm/jdk1.8.0_341 export ...
- 用于数据科学的顶级 C/C++ 机器学习库整理
用于数据科学的顶级 C/C++ 机器学习库整理 介绍和动机--为什么选择 C++ C++ 非常适合 动态负载平衡. 自适应缓存以及开发大型大数据框架 和库.Google 的MapReduce.Mong ...
- docker安装消息队列(rabbitmq)及数据库(mongo、mysql)
解决ipv6 访问问题 nohup socat TCP6-LISTEN:36001,reuseaddr,fork TCP4:127.0.0.1:36000 > /root/ip6to4.log ...
- C++ 中指针常量、指向常量的指针、引用类型的常量
命题1. 在C++ 中 const T a 与 T const a 是一样的, 表示a是一个T类型的常量. 测试: 一. 形参定义为引用类型的常量 在函数传参时,形参若定义为 const T& ...
- Pinely Round 1 (Div. 1 + Div. 2)
比赛链接 A 题意 构造两个长为 \(n\) 排列,使得两排列有长为 \(a\) 公共前缀和长为 \(b\) 的公共后缀. 题解 知识点:构造. 注意到,当 \(a+b\leq n-2\) 时,中间段 ...
- 基于LSM树的存储机制简述
下午听了关于MyRocks-PASV的研究讲座,很有意思所以学习了一下LSM树的一些简单的底层原理.现在整理一下 我们都知道目前Key:Value型的数据库普遍较之关系型数据库有着更好的表现,为什么会 ...
- SerialException:Cannot configure port something went wrong
完整报错 SerialException:Cannot configure port something went wrong, Original message: OSError(22, '参数错误 ...
- 浏览器内存漫游解决方案(js逆向)
//浏览器内存漫游解决方案(js逆向) //原理通过ast把所有的变量,参数中间值进行内存的存储 //搜索AST-hook,进入github //现在github的库下载下来 //anyproxy n ...