一、渲染品牌列表

<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. costool - 腾讯云cos快捷工具。

    目录 使用截图 使用方法 配置文件 安装方法 其他 一个腾讯云cos(对象存储)非官方快速上传和下载的工具,使用官方go-sdk二次开发.可以用于以下场景. 备份一些配置文件,比如.bashrc .v ...

  2. python(27)反射机制

    1. 什么是反射? 它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法 2. 反射的优点 一个概念被提出来,就是要明白它的优点有哪些,这样我们才能知道为什么要使用反射. ...

  3. 第一百零七篇:基本数据类型(undefined,null,boolean类型)

    好家伙, 本篇内容为<JS高级程序设计>第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Numb ...

  4. C温故补缺(一):数据类型和基本类型占位

    数据类型 基本类型:就是算术类型,包括整型和实型 枚举类型:一组离散的整数 void类型:无可用值类型 派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun( ...

  5. vuex环境配置及使用

    vuex环境搭建 1.下载vuex,如果你是开发Vue2,请下载vuex3版本 npm i vuex@3 2.搭建vuex的环境配置 ​ 创建 src/state/index.js 文件 //导入Vu ...

  6. Visual Studio高版本 ArcObject for .Net 低版本

    在基于ArcGIS的开发中,经常会存在Visual Studio版本高,ArcObject for .Net 版本低的问题.例如Visual Studio 2015的环境下,安装ArcObject f ...

  7. 《浅谈亚 log 数据结构在 OI 中的应用》阅读随笔

    这篇又长长长了! \(8435\to 8375\to 9729\) 早就馋这篇了!终于学了( 压位 Trie 确实很好写啊 但是总感觉使用范围不是很广的样子 似乎是见的题少 原文里都在用 \(\log ...

  8. Zabbix技术分享——监控windows进程资源使用情况

    监控系统进程资源的使用情况是IT运维的常规操作.在实际工作中,运维人员有可能遇到可以使用Zabbix Agent监控linux系统进程,却无法监控windows系统进程的情况.这是因为Zabbix A ...

  9. MySQL锁,锁的到底是什么?

    MySQL锁系列文章已经鸽了挺久了,最近赶紧挤了挤时间,和大家聊一聊MySQL的锁. 只要学计算机,「锁」永远是一个绕不过的话题.MySQL锁也是一样. 一句话解释MySQL锁: MySQL锁是解决资 ...

  10. requests模块和openpyxl模块

    第三方模块的下载和使用 1,第三方模块就是别人大神们已经写好的模块,功能特别强大.我们如果像使用第三方模块就先要进行下载.下载完成后 才可以在python中直接调用 2.下载方式一:pip工具 pip ...