Vue基础语法核心指令过滤器计算属性监听属性

news2024/11/19 17:50:09

目录

1. 模板语法

1.1 插值

1.1.1 文本

1.1.2 html

1.1.3 属性

1.1.4 表达式

1.2 指令

1.2.1 核心指令

1.2.1.1 v-if |v-else-if|v-else

1.2.1.2 v-show

1.2.1.3 v-for

1.2.1.4 v-on|v-model|v-for

1.2.1.5 参数 v-bind:href,v-on:click

1.2.1.6 简写

2. 过滤器

2.1 局部过滤器

2.2 全局过滤器

3. 计算属性

4.监听属性


1. 模板语法

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析。vue将模板编译成虚拟dom,
结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

html模板语法:
这是一种基于字符串的模板技术,以字符串和数据为输入,通过用正则表达式将占位符替换为所需数据的方式,构建出完整的 HTML 字符串。

1.1 插值

1.1.1 文本

使用{{msg}}的形式,标签将会被替换成为数据对象(data)上msg属性值,当绑定的数据对象上的msg属性值发生变化时,插值处的值也会发生变化(双向绑定)
示例:上节课的hello vue示例使用的就是插值。

1.1.2 html

{{}}的方式将数据处理为普通文本,如果要输出html,需要使用v-html指令
示例:
在data中定义一个html属性,其值为html

data: {
    html:  '<input type="text" value="hello"/>'
}

在html中取值

<span v-html="html"></span>

1.1.3 属性

HTML属性中的值应使用v-bind指令。类型与jQuery中的$("#xxx").attr(propName, propVal)
示例,以修改元素的class属性为例:
定义一个样式

<style>
.redClass {
    font-size: 30px;
    color: red;
}
</style>

在data中定义一个属性,其值为上面定义的样式名

data: {
    red: 'redClass'
}

在html使用v-bind指令设置样式

<p>设置之前:  aaaa</p>
<p>设置之后: <span v-bind:class="red">aaa</span></p>

在浏览器中可以看到相应的效果

1.1.4 表达式

几种常见的表达式:

  • {{str.substr(0,6).toUpperCase()}}
  • {{ number + 1 }}
  • {{ ok ? 'YES' : 'NO' }} 三元运算符
  • <li v-bind:>我的Id是js动态生成的</li>

示例1:
在html中加入元素,定义表达式

<span>{{str.substr(0,6).toUpperCase()}}</span>

在data中加入一个属性,名为str与html中对应

data: {
    str: 'hello vue'
}

查看效果:字符串被截取,并转换为大写

示例2:

<span>{{ number + 1 }}</span>

在data中加入一个属性,名为str与html中对应

data: {
    number: 10
}

在data中定义的number值将会被加1

示例3:
这是一个三元运算,如果ok为true,表达式值为YES ,如果ok为false则表达式值为NO

<span>{{ ok ? 'YES' : 'NO' }}</span>

在data中加入一个属性,名为str与html中对应

data: {
    ok: true
}

示例4:
演示id属性绑定和动态赋值

<p>
    <input type="text" v-bind:id="bookId"/></br>
    <!--动态生成Id-->
    <input type="text" v-bind:id="'bookList_' + id"/>
</p>
data: {
    bookId: 'book001',
    id: 'book002'
}

该示例可以通过开发者工具查看生成的id属性值。

1.2 指令

指令指的是带有“v-"前缀的特殊属性

1.2.1 核心指令

1.2.1.1 v-if |v-else-if|v-else

根据其后表达式的bool值进行判断是否渲染该元素, 指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论)
示例:
HTML

<div v-if="type === 'A'">
    type == A
</div>
<div v-else-if="type === 'B'">
    type == B
</div>
<div v-else>
    other value
</div>

JS

    var vm = new Vue({

        el: '#app',

        data: {
            type: 'C'
        }
    });

可以修改data中的type值观察页面的输出。

注: js = == === 之间的区别
一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false
alert(1 == “1”); // true
alert(1 === “1”); // false

1.2.1.2 v-show

与v-if类似,只是不会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"。
当v-show 表达式true则显示,否则不显示。
注意:使用v-show,虽然不显示,但在页面的dom中是存在的,只是display属性为none
示例: 在HTML中加入如下内容

<div v-show="show === 'yes'">
    show == yes
</div>

在data中定义show属性

var vm = new Vue({
    el: '#app',
    data: {
        show: 'yes' 
    }
});

修改show值,观察页面显示

1.2.1.3 v-for

循环遍历

  • 遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
  • 遍历对象: v-for="(value,key,index) in stu", value属性值, key属性名,index下标
    示例:
    定义一个div,使用v-for指令输出,items是vue实例中data中定义的对象数组
<!--数组-->
<div v-for="item in items">
     {{item.name}} -- {{item.id}}
</div>

<!--循环生成下拉列表-->
<div>
    <select >
        <option v-for="item in items" 
            v-bind:value="item.id">{{item.name}}</option>
    </select>
</div>

<!--对象-->
<div v-for="(o,key) in obj">
    {{key}}-{{o}}
</div>
var vm = new Vue({

    el: '#app',

    data: {
        itmes:[
            {name: 'zs',age:18},
            {name: 'ww',age:19},
            {name: 'ls',age:20},
            {name: 'zl',age:21}
        ],
        obj: {
            name:'张三',
            age: 21,
            addr: '湖南长沙'
        }
    }
});
1.2.1.4 v-on|v-model|v-for

创建一组多选框,可以获取到用户选择项

<!--
循环生成一组多选按钮,v-model通过vue的双向绑定将用户选择的项保存到
定义的selected组数中
-->
<div v-for="(item,index) in items">
    {{index}}:<input type="checkbox" v-bind:value="item.id"
            v-model="selected">{{item.name}}
</div>
<button v-on:click="getSelected()">获取选择</button>
var vm = new Vue({

    el: '#app',

    data: {
        type: 'C',
        show: 'no',
        items:[
            {name: '长沙',id:18},
            {name: '昆明',id:19},
            {name: '武汉',id:20},
            {name: '南京',id:21}
        ],
        obj: {
            name:'张三',
            age: 21,
            addr: '湖南长沙'
        },
        selected:[]
    },
    methods: {
        getSelected: function() {
            console.log(this.selected);
        }
    }
});
1.2.1.5 参数 v-bind:href,v-on:click

示例:

<!--参数:href-->
<div>
    <a v-bind:href="url">baidu</a>
</div>

<!--
参数:动态参数.
attname需要在data中定义,
注意:attname要全部小写!!
-->
<div>
    <a v-bind:[attrname]="url">baidu</a>
    <button v-on:[evname]="clickme">点我看看</button>
</div>

注意:在动态参数中,作为参数的变量名(如:attrname)要全部小写,否则无效 !!

var vm = new Vue({

    el: '#app',

    data: {

        url: 'https://www.baidu.com',
        attrname:'href',
        evname: 'click'
    },

    methods: {
        clickme: function() {
            console.log("点到我了");
        }
    }

});
1.2.1.6 简写

Vue为v-bind和v-on这两个最常用的指令,提供了特定简写

2. 过滤器

vue允许自定义过滤器,一般用于常见的文本格式化,过滤器可用的两个地方:双花括号插值v-bind表达式,过滤器应该被添加在js表达式的尾部,使用管道运算符"|"

2.1 局部过滤器

局部过滤器的定义:

var vm = new Vue({
    filters: {
        'filterName': function(value) {
            //过滤器实现
        }
    }
});

 过滤器的使用

<!--双花括号中的使用-->
{{ name | capitalize }}

<!--在 v-bind 指令中的使用-->
<div v-bind:id="rawId | formatId"></div>
  • 注1:过滤器函数接受表达式的值作为第一个参数
  • 注2:过滤器可以串联
    {{ message | filterA | filterB }}
  • 注3:过滤器是JavaScript函数,因此可以接受参数:
    {{ message | filterA('arg1', arg2) }}

示例:

<div>
    <p>{{msg | toUpperCase}}</p>
</div>
var vm = new Vue({

    el: '#app',

    data: {
        msg:"hello vue"
    },

    //局部过滤器
    filters:{
        toUpperCase: function(value) {
            return value.toUpperCase();
        }
    }

});

2.2 全局过滤器

拷入date.js(日期格式化)放入项目js目录中,在页面中引入。
定义全局过滤器

//全局过滤器
Vue.filter('fmtDate',function(value) {
    return fmtDate(value, 'yyyy年MM月dd日')
});

过滤器的使用

<div>
    <p>{{date | fmtDate}}</p>
</div>

3. 计算属性

计算属性用于快速计算视图(View)中显示的属性,这些计算将被缓存,并且只在需要时更新
使用场景:当一个属性需要复杂的逻辑运算之后才能获取其值,可以使用计算属性,在一个计算属性中可以完成各种复杂的逻辑,包括运算,方法调用等,只要最终返回一个结果就可以了
声明计算属性的格式:

computed:{
   xxx:function(){

   }
}

示例: 使用计算属性,计算书本的总价
定义测试数据,和计算属性,计算属性遍历书本记录,计算总价

var vm = new Vue({

    el: '#app',

    data: {
        //定义测试数据
        books: [
            {name:'红楼梦', price:"120"},
            {name:'三国演义', price:"100"},
            {name:'水浒传', price:"90"},
        ]
    },

    //计算属性
    computed: {
        compTotal: function() {
            let sum = 0;
            for(index in this.books) {
                sum += parseInt(this.books[index].price);
            }
            return sum;
        }
    }

});

计算属性在页面中的使用

<div v-for="book in books">
    {{book.name}} -> {{book.price}}
</div>

<div>
    总价:{{compTotal}}
</div>

关于var 与 let

  • var声明为全局属性
  • let为ES6新增,可以声明块级作用域的变量(局部变量)
  • 建议使用let声明变量

4.监听属性

使用场景:我们可以使用监听属性watch来响应数据的变量, 当需要在数据变化时执行异步或开销较大的操作时,这种方式比较有用。回想一下是否做过下拉列表的级联选择?

watch声明语法:

watch: {
    xxxx: function(val) {
        //监听器实现
    }
}

示例: 米和厘米的单位换算
设置监听器:

var vm = new Vue({

    el: '#app',

    data: {
        m: 1,
        cm: 100
    },

    //设置监听属性
    watch: {
        m: function(val) {
            if(val)
                this.cm = parseInt(val) * 100;
            else
                this.cm = "";
        },
        cm: function(val) {
            if(val)
                this.m = parseInt(val) / 100;
            else
                this.m = "";
        }
    }

});

HTML中使用v-model实现与数据的双向绑定

<div>
    <!--注意v-model的双向绑定-->
    米:     <input type="text" v-model="m">
    厘米:  <input type="text" v-model="cm">
</div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优思学院|ISO9001管理体系从何而来?97%的专家不知道

ISO9001是当前全球最受欢迎的质量管理系统&#xff0c;特别是踏入21世纪以后&#xff0c;采用这套系统的政府部门、公营机构和企业数量都可谓几何级数上升。 截至2020年&#xff0c;ISO组织已向全球170个国家发出合共916842张ISO9001证书。 探源ISO9001的根源 那么&#xff…

代码随想录第45天 | ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 let ns.lengthlet a0if(n0)return true for(let i0;i<t.length;i){if(s[a]t[i])aif(an)return true}return false// s、t的长度const [m, n] [s.length, t.length];// dp全初始化为0const dp new Array(m 1).fill(0).map(x > new Array(n 1).fill(0))…

SpringBoot SSMP项目搭建保姆级教程

一、SpringBoot项目创建 Idea中创建New Project&#xff0c;选择Spring Initializr&#xff0c;输入Name、Location、JDK等&#xff0c;下一步。 选择合适的 SpringBoot 版本&#xff0c;点击创建。 此时&#xff0c;SpringBoot基础项目已经创建完毕。 二、Entity 开发 引入…

【AIFEM案例教程】压力容器热固耦合分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

天锐绿盾公司终端文件数据、资料防泄密系统——自动智能透明加密保护核心数据防止外泄软件

天锐绿盾公司终端文件数据防泄密系统采用高强度加密算法&#xff0c;对各种类型的文件进行实时、强制、透明的加解密。 该系统具有以下特点&#xff1a; 稳定性高&#xff1a;天锐绿盾文档透明加密安全系统是酷卫士电子文档安全管理平台的一个重要功能模块&#xff0c;性能稳定…

如何快速批量修改多个视频的MD5值?

在日常工作和生活中&#xff0c;我们经常需要处理大量的视频文件。有时候&#xff0c;我们需要修改这些视频文件的MD5值来满足某些需求。手动修改每个视频的MD5值是一项繁琐且容易出错的任务。幸运的是&#xff0c;有一种方法可以快速批量修改多个视频的MD5值&#xff0c;以下是…

[MySQL]BLOB/TEXT column ‘xxx‘ used in key specification without a key length

报错信息&#xff1a; SQLSTATE[42000]: Syntax error or access violation: 1170 BLOB/TEXT column xxx used in key specification without a key length 原因&#xff1a; MySQL的唯一索引不支持text类型的字段&#xff01;

Vue3开始

1. Vue3简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09; 经历了&#xff1a;4800次提交、40个RFC、600次PR、300贡献者 官方发版地址&#xff1a;Release v3.0.0 One Piece vuejs/core 截止2023年…

网站防护的多种方案,如何让网站坚不可破

越权问题 问题叙述&#xff1a;存在权限管理不当的问题&#xff0c;导致用户可以越权访问资源。 改动提议&#xff1a;强化用户权限认证机制。 留意&#xff1a;通常&#xff0c;这种问题涉及到不同权限用户之间的资源访问&#xff0c;如浏览历史、cookie&#xff0c;以及标识…

软考公告 | 2023下半年软考模拟练习平台上线

软考办官方2023年下半年计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试模拟练习平台已开通&#xff0c;各位考生可于2023年10月16日-11月3日登录免费模拟练习。 模拟地址&#xff1a; https://bm.ruankao.org.cn/sign/welcome 01 软考模拟系统 大家可以登录…

FPGA纯verilog实现RIFFA的PCIE通信,提供工程源码和软件驱动

目录 1、前言免责声明 2、我已有的PCIE方案3、RIFFA简介RIFFA概述RIFFA架构RIFFA驱动RIFFA方案的局限性 4、RIFFA 源码详解用户接口 5、vivado工程详解6、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 7、上板调试验证并演示8、福利&#xff1a;工程代码的…

滴滴弹性云基于 K8S 的调度实践

上篇文章详细介绍了弹性云混部的落地历程&#xff0c;弹性云是滴滴内部提供给网约车等核心服务的容器平台&#xff0c;其基于 k8s 实现了对海量 node 的管理和 pod 的调度。本文重点介绍弹性云的调度能力&#xff0c;分为以下部分&#xff1a; 调度链路图&#xff1a;介绍当前弹…

【数据结构】Java对象的比较

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力…

Swift 周报 第三十九期

文章目录 前言新闻和社区卖不动了 iPhone 在美国市场销量或陷入停滞与 Apple 专家会面交流 提案通过的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组整理周报的第三十九期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff0c;欢迎在文末留…

C#根据ip获取地理位置信息的方法,史上最全

商业收费 百度地图高德地图腾讯地图纯真IP 开源免费 纯真ip免费版 以前可以直接下载&#xff0c;现在获取ip数据库的方式改变了&#xff0c;自行官网查看把&#xff0c;个人或者学术研究&#xff0c;商用追责&#xff0c;商业用途慎用 using System.Collections.Generic; us…

亚马逊,shopee,lazada流量攻略:测评补单是提升排名不可或缺的利器

亚马逊卖家为什么一定要测评补单&#xff0c;今年不测评补单的卖家会很惨&#xff0c;不要抬杠&#xff0c;听完林哥给你分析&#xff0c;如果你感觉不对在抬杠不迟 1.亚马逊的广告成本越来越贵而且单纯靠砸广告做排名&#xff0c;你是不是发现广告一停排名就往下掉&#xff0…

求臻医学:实体肿瘤FDA/NMPA新获批抗癌药物/适应症盘点

肿瘤分子靶向治疗发展迅速&#xff0c;随着研究的深入开展&#xff0c;多款靶向药物及免疫药物获批。求臻医学根据美国食品药品监督管理局&#xff08;FDA&#xff09;公布信息、中国国家药品监督管理局&#xff08;NMPA&#xff09;发布的药品批准证明文件&#xff0c;以及各公…

[esp32]Micorpython进行PWM

通过wokwi进行模拟PWM from machine import PWM,ADC,Pin import time led_blue1PWM(Pin(2),freq1000)#把GPIO2定义为PWM输出&#xff0c;脉冲频率为1秒1000个 led_blue1.duty(1023) btn1Pin(35) liangdu0 while(1):if(btn1.value()0):#有按钮按下time.sleep(1) #延时1秒liang…

视频标注的两个主要方法

视频标注技术 单一图像法 在自动化工具面世之前&#xff0c;视频标注效率不高。各公司使用单一图像法提取视频中的所有帧&#xff0c;然后使用标准图像标注技术将它们作为图像来标注。在30fps的视频中&#xff0c;每分钟有1800帧。这个过程没有利用视频标注的优势&#xff0c;…

性能测试 —— 通过Jmeter压测存储过程!

一、存储过程准备&#xff1a; 1、建立一个空表&#xff1a; 1 CREATE TABLE test_data ( id NUMBER, name VARCHAR2(50), age NUMBER ); 2、建立一个存储过程&#xff1a; 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PROCEDURE insert_test_data (n IN NUMBER) AS BEGIN --E…