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实例 ...
随机推荐
- costool - 腾讯云cos快捷工具。
目录 使用截图 使用方法 配置文件 安装方法 其他 一个腾讯云cos(对象存储)非官方快速上传和下载的工具,使用官方go-sdk二次开发.可以用于以下场景. 备份一些配置文件,比如.bashrc .v ...
- python(27)反射机制
1. 什么是反射? 它的核心本质其实就是基于字符串的事件驱动,通过字符串的形式去操作对象的属性或者方法 2. 反射的优点 一个概念被提出来,就是要明白它的优点有哪些,这样我们才能知道为什么要使用反射. ...
- 第一百零七篇:基本数据类型(undefined,null,boolean类型)
好家伙, 本篇内容为<JS高级程序设计>第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Numb ...
- C温故补缺(一):数据类型和基本类型占位
数据类型 基本类型:就是算术类型,包括整型和实型 枚举类型:一组离散的整数 void类型:无可用值类型 派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun( ...
- vuex环境配置及使用
vuex环境搭建 1.下载vuex,如果你是开发Vue2,请下载vuex3版本 npm i vuex@3 2.搭建vuex的环境配置 创建 src/state/index.js 文件 //导入Vu ...
- Visual Studio高版本 ArcObject for .Net 低版本
在基于ArcGIS的开发中,经常会存在Visual Studio版本高,ArcObject for .Net 版本低的问题.例如Visual Studio 2015的环境下,安装ArcObject f ...
- 《浅谈亚 log 数据结构在 OI 中的应用》阅读随笔
这篇又长长长了! \(8435\to 8375\to 9729\) 早就馋这篇了!终于学了( 压位 Trie 确实很好写啊 但是总感觉使用范围不是很广的样子 似乎是见的题少 原文里都在用 \(\log ...
- Zabbix技术分享——监控windows进程资源使用情况
监控系统进程资源的使用情况是IT运维的常规操作.在实际工作中,运维人员有可能遇到可以使用Zabbix Agent监控linux系统进程,却无法监控windows系统进程的情况.这是因为Zabbix A ...
- MySQL锁,锁的到底是什么?
MySQL锁系列文章已经鸽了挺久了,最近赶紧挤了挤时间,和大家聊一聊MySQL的锁. 只要学计算机,「锁」永远是一个绕不过的话题.MySQL锁也是一样. 一句话解释MySQL锁: MySQL锁是解决资 ...
- requests模块和openpyxl模块
第三方模块的下载和使用 1,第三方模块就是别人大神们已经写好的模块,功能特别强大.我们如果像使用第三方模块就先要进行下载.下载完成后 才可以在python中直接调用 2.下载方式一:pip工具 pip ...