首页 > 其他分享 >Vue基础语法

Vue基础语法

时间:2023-04-17 21:48:24浏览次数:27  
标签:Vue name 示例 基础 语法 过滤器 data 属性

模板语法

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

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

插值

文本:

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

html:

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

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

在html中取值

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

属性:

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>

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

表达式:

几种常见的表达式:

  • {{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属性值。

 

指令

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

核心指令

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

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值,观察页面显示

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: '湖南长沙'
        }
    }
});

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);
        }
    }
});

参数 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("点到我了");
        }
    }

});

简写

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

 

过滤器

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

局部过滤器

局部过滤器的定义:

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();
        }
    }

});

全局过滤器

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

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

过滤器的使用

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

计算属性

计算属性用于快速计算视图(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声明变量

监听属性

使用场景:我们可以使用监听属性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>

标签:Vue,name,示例,基础,语法,过滤器,data,属性
From: https://www.cnblogs.com/wujingyu123/p/17327594.html

相关文章

  • c/c++零基础坐牢第三天
    c/c++从入门到入土(3)开始时间2023-04-17 19:07:20结束时间2023-04-17 20:53:40前言:经过三天的算法训练,大家肯定对后面的编程知识产生浓厚的兴趣,有了前两章的知识铺垫,我们今天来学习一下如何从键盘输入和屏幕输出!以下是自制思维导图参考于苏小红C语言程序设计(第四版): 作业三......
  • 集合基础
    Set:无序不可重复(独一无二)List:有序可重复(排序帮手)Queue:有序可重复(叫号机)Map:key无序不可重复,value无序可重复(key搜索) 为什么要使用集合?数组的缺点是一旦声明之后,长度就不可变了;同时,声明数组时的数据类型也决定了该数组存储的数据的类型;而且,数组存储的数据是有序的、可重......
  • vue加goframe使用AES加解密(记录)
    vue加goframe使用AES加解密首先,需要在前端使用Vue的crypto-js库来进行AES加解密,可以使用以下命令进行安装:npminstallcrypto-js然后在需要加解密的组件中引入该库:importCryptoJSfrom'crypto-js'对于加密,可以使用以下代码:constkey=CryptoJS.enc.Utf8.parse('1234567......
  • Docker基础知识点
    1.Docker概述:1.1Docker为什么会出现:问题:在互联网开发环境当中很多情况会遇到在我的电脑上可以运行但是到你的电脑上就无法运行可,而且在软件版本更新以后会导致服务不可用的情况出现。解决方式:发布一个项目:将一个项目打成jar包时带上Redis,Mysql,jdk,ES等一套环境一起发......
  • HTML基础
    在发布这条博客之前,我已在B站自学HTML至P110,未以博客形式记录,而是在个人笔记本上记录,所以我对HTML已经有深刻的理解。要让设计者在网络上发布的网页能够被世界各地的浏览器所阅读,需要一种规范化的发布语言。在万维网上,文档的发布语言是HTML(超文本标记语言)。超文本标记语言就是该文......
  • vue常用组件之confirm用法及说明
    vue常用组件之confirm用法及说明原文链接:https://www.jb51.net/article/263587.htm+目录vue组件之confirmvue自定义confirm弹窗(全局组件)全局组件方式vue组件之confirm一些自带的方法,比如alert,confirm等,往往由于浏览器不同而展现出不同的样式,为了统一,我们可以自己实现简单封装,......
  • vue3微信公众号商城项目实战系列(6)用户登录
    1.一个商城要实现购物的功能,需要能识别用户的身份,这样才能完成加购物车,下单,付款等操作。但微信公众号商城和PC端商城有些不一样,区别在于微信公众号商城使用微信支付的时候需要一个openid的参数(以后再具体讲)这个参数必须访问微信公众号提供的接口才能获取到,基于这个原因,用户登录......
  • Git基础内容笔记
    Git笔记更多gitlog命令可查看:http://git-scm.com/docs/git-log目录Git笔记Git工作流程一、Git的下载和安装1.1Ubuntu系统下载1.2Windows系统下载1.3设置用户名和邮箱二、基本使用2.1创建仓库gitinitgitclone2.2添加文件2.3提交文件至本地仓库gitadd命令gitcommi......
  • 机器学习-模型评价基础概念
    1:训练集、测试集及其函数分割;2:准确率、召回率;3:交叉验证;4:混淆矩阵;(1)介绍TP、FN、TN、FP、TPR、FPR等概念:https://zhuanlan.zhihu.com/p/3639240815:ROC曲线、AUC曲线;(1)ROC、AUC曲线讲解https://www.bilibili.com/video/BV1SK4y1K7v3/?spm_id_from=333.999.0.0......
  • Docker基础命令及面试问题
    Docker包括三个基本概念:镜像(Image):Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统。容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定......