VUE学习笔记--基础标签

摘要:
本笔记仅作为学习vue过程中的知识记录,也作为知识复习和探究的提纲。一般来说,这并没有严格定义区别,但更多的是习惯惯例。默认方法的第一个参数是事件对象,它被手动指定为$event。V-on可以支持一些修改器来防止气泡等。如果不想被重用,可以为标记设置不同的键来实现这一点。Vue认为可以重用相同的密钥。V-show显示隐藏的V-show之后是判断条件或变量。如果为false,display=none,隐藏元素。实现原理是v-bind将数据绑定到元素,通过v-on侦听事件,并将元素的值绑定到数据。

本笔记仅用作学习vue过程中的知识记录,亦用作知识温习查询的纲要。

a、一些称呼

函数-方法:一般在上下文直接定义的function叫做函数,而在对象中定义的叫方法。即方法是附属于某个实例的,而函数是一个声明。通常,这个并不严格定义区分,更多是习惯约定。

1、options的主要属性

const obj = {
  counter: 0,
  message: "abc"
}

const app = {
  el: "#app",
  data: obj, 
  methods: {
    add: function(){
      console.log('add 被执行');
      this.counter ++;
    },
    sub: function(){
      console.log('sub 被执行');
      this.couter --;
    }
   
  }
}

其中,格式要求如下:
const app = {
el: 字符串或者htmlObject对象,决定vue之后会管理哪一个dom对象
data: 对象或者函数(组件中,data必须为函数)。vue实例对应的数据对象
methods: 函数,定义属于vue的方法,可以在其他地方调用,也可以在命令中调用

}

2、生命周期

vue 的主要生命周期主要有
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed

具体的完整生命周期,见官网图

3、基本用法

v-bind 数据绑定

mustache语法只能用于text处,标签属性不可以使用。应使用v-bind:属性="变量名"的形式,可以简写为:属性="变量名"。
动态绑定class(根据data的某个属性,动态调整元素的class),可以使用:class="{class1:true,class2:false}"的形式,如此则class1有效,class2无效。动态绑定class,可以支持数组跟函数。
动态绑定style,跟class类似,可以支持字符串,对象,数组,函数。

computed 计算属性

跟methods有点类似,但有缓存效果。页面重新渲染值不会变化,会立即返回之前的计算结果,而不必再次执行函数。注意跟watch区分,watch没有缓存效果,每次渲染都会执行(值无变化也会执行)。(这里的渲染指页面多次引用,而不是浏览器dom对象刷新)
computed中的数据为对象,写作方法时,实际是对象的getter方法的简写(setter略掉了)。setter方法可以传值。比如以下代码实际是一样的:

new Vue({
    computed:{
        //写法1
        fullName:{
            get: function(){
                return this.firstName + this.lastName;
            }
        },
        
        //写法2
        fullName: function(){
            return this.firstName + this.lastName;
        }
    }
    
})

因为有get,set方法,每次调用实际都是先set再get方法。简写的方式实际是语法糖,这里调用的是一个属性,而不是方法,mustache写法中没有括号。

v-on 事件绑定

比如onclick可以写作:v-on:click="",内容可以是函数名,也可以是js代码。可以简写为@click。默认方法的第一个参数为事件对象,手动指定事件对象用$event。
v-on可以支持一些修饰符,用于阻止冒泡等。
.stop 阻止冒泡
.self 当时间在钙元素本身触发时,才触发事件
.capture 添加事件监听器时,使用事件捕获模式
.prevent 阻止默认事件
.native 监听组件根元素的原生事件
.once 只触发一次
对于capture,即是给元素添加一个监听器,当元素发生冒泡时,先触发带有该修饰符的元素。若有多个该修饰符,则由外而内触发。就是谁有该事件修饰符,就先触发谁。

<div id="content">
    <div   v-on:click.capture="doc">
        obj1
        <div   v-on:click.capture="doc">
            obj2
            <div   v-on:click="doc">
                obj3
                <div   v-on:click="doc">
                obj4
                <!--。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。点击obj4的时候,弹出的顺序为:obj1、obj2、obj4、obj3;
                由于1,2有修饰符,故而先触发事件,然后就是4本身触发,最后冒泡事件。
                -->
            </div>
            </div>
        </div>
    </div>
</div>

什么是根元素的原生事件? 组件相关,稍后处理;

v-if, v-else if, v-else 条件语句

如果条件不满足,则对应的html内容不予展示;值可以为判断条件或者变量;
ps:页面上元素进行切换时,vue为了性能考虑,会优先重用重复的元素。如果不想被重用,可以给标签设置不同的key来实现,相同的key,vue认为是可以重用的。

v-show 显示隐藏

v-show 后跟判断条件或变量,如果为false,则display=none,隐藏元素。(v-if如果为false,页面直接无此元素)
频繁切换显隐,使用v-show,只有一次切换,使用v-if;

v-for 遍历

(val, key, index) in objList 这种方式,可以获取到键值以及下标索引。需要注意的是,官方推荐,在使用v-for时,给对应的元素或组件添加一个:key属性。
原因跟vue的虚拟DOM的diff算法有关,如果没有加:key,则vue无法区分列表中的多个元素,在对列表的中间元素进行增删改时会进行全局遍历,效率较低。而有:key则方便区别定位元素,效率较高。

数组中哪些方法是响应式的?
1、push()
2、pop() 从后边删除
3、shift() 从前删
4、unshift() 最前追加
5、splice()
6、sort()
7、reverse()

直接修改数组元素,不能触发响应式,原因是赋值操作符 = 并没有被vue监听。

filters 过滤器

过滤器用于对某类数据的展示等提供修饰,也是一类方法,可以直接{{data | 过滤器}}使用。

v-model 双向绑定

mustache语法只能实现单向绑定(数据渲染元素),不能完成元素到数据的绑定。v-model可以实现双向绑定。
实现原理是v-bind将数据绑定到元素,并通过v-on监听事件,将元素的值绑定到数据。

<div id="app">
    <!--input、textarea绑定-->
    <input type="text"   name="message" v-model="message" />

    <!--radio绑定,v-model相同,可以省略name(v-model可以实现多选1)-->
    <input type="radio"   value="男" v-model="gender"  /> 男
    <input type="radio"   value="女" v-model="gender"  /> 女

    <!--checkbox 单个,一般用boolean-->
    <input type="checkbox"   v-model="license" /> 同意协议
    
    <!--checkbox 多个,对应数组-->
    <input type="checkbox" value="足球" v-model="hobbies" />足球
    <input type="checkbox" value="篮球" v-model="hobbies" />篮球
    <input type="checkbox" value="羽毛球" v-model="hobbies" />羽毛球
    <input type="checkbox" value="乒乓球" v-model="hobbies" />乒乓球
    
    <!--select 单选-->
    <select name="abc" v-model="fruit">
        <option value="苹果">苹果</option>
        <option value="葡萄">葡萄</option>
        <option value="香蕉">香蕉</option>
        <option value="榴莲">榴莲</option>
    </select>
    <!--select 多选(按住ctrl)-->
    <select name="abc" v-model="fruit" multiple>
        <option value="苹果">苹果</option>
        <option value="葡萄">葡萄</option>
        <option value="香蕉">香蕉</option>
        <option value="榴莲">榴莲</option>
    </select>
    
    <!--动态数据绑定-->
    <!--更多时候,select及checkbox的选项是不固定的,前端无法写死,而是要根据后台数据动态生成-->
    <!--用label包起来,是为了点击文字也有效果,提升用户体验-->
    <label v-for="item in originHobbies" :for="item">
        <input type="checkbox" :value="item" :  v-model="hobbies" />{{item}}
    </label>
    
    
</div>
const app = new Vue({
    el: "#app",
    data:{
        message: "你好呀",
        gender: "男",
        license: false,
        hobbies: [],
        fruit: "香蕉",
        fruits: []
    }
})

v-model还需注意的一点是修饰符,修饰符有:lazy、number、trim三个。
lazy即延迟处理,一般是input之类的内容在失去焦点或者触发回车时进行数据刷新,而不是一旦有变动立即刷新。 number用于确保输入的数据类型为数字,默认为字符串。
trim是自动去掉前后的空格。
使用方式均为v-model.lazy="值"

免责声明:文章转载自《VUE学习笔记--基础标签》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]VR原理讲解及开发入门10 深入kubernete落地实践深入101 ingress四层代理、session保持、定制配置、流量控制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

le5le-topology开发纪要

组态开源库  国内的有些新一点的开源项目,都会有部分公开,有部分设置为企业版.开源要生存,自然会采用这种方式.这个开源项目来说 当前通过几天的读资料之后发现,公开的部分svg文件都是基础的那几个, 物联网行业之类的不在开源之中. 继续看看,能否加入自定义的方式使用这个库  关于企业版与公用版: 个人总结:说明文档中企业版是0.2以上版本,从更新的压缩包版本...

vue用hbuilderX打包app嵌入h5方式云打包和遇到的问题

vue用hbuilderX打包app嵌入h5方式云打包和遇到的问题 vue用hbuilderX打包app就可以了,不过有兼容性问题,转换rem的用不了,嵌入到app的webview里面变得很小了,另外还有返回键监听的问题需要处理,否则按手机上的返回键不起作用,另外缓存问题,加载页跳转白屏问题也需要优化。======================安卓本地打...

Vue笔记:Vue3 Table导出为Excel

1、安装 npm install -S file-saver 用来生成文件的web应用程序 npm install -S xlsx 电子表格格式的解析器 npm install -D script-loader 将js挂载在全局下npm install -S element-ui...

21.Shiro在springboot与vue前后端分离项目里的session管理

1.前言 当决定前端与后端代码分开部署时,发现shiro自带的session不起作用了。 然后通过对请求head的分析,然后在网上查找一部分解决方案。 最终就是,登录成功之后,前端接收到后端传回来的sessionId,存入cookie当中。 之后,前端向后端发送请求时,请求Head中都会带上这个sessionid。 后端代码通过对这个sessionid的解...

关于vue在列表展示数据的时候,选择更改其中一项,数据跟着实时变动的问题

  最近刚接触vue的项目,今天发现页面上有一个问题 就是 页面中有一个表格,点击表格中的修改,弹出来一个修改框可以修改数据,但是现在问题是,在弹出框对其进行修改的时候,列表中对应的数据也在实时的变动。我想要的效果是,当我保存的时候时候,在使列表数据更改,而不是输入框一边更改,这个问题刚开始时没有发现 ,是公司测试的同事给提出来的   之前的代码是点击修...

vue 移动端车牌键盘

1.npm install input-plate-number --save 样式可以,键盘相对严谨,但是输入有bug, 2.npm installvue-carplate --save 插件样式个人看来是最好看的,键盘的输入最严谨,但是没有新能源车牌的选项, 3.https://github.com/Pinenutss/LicensePlate 插件是...