ES6+Vue

news2024/11/16 15:40:25

ES6+Vue

ES6语法

​ VUE基于是ES6的,所以在使用Vue之前我们需要先了解一下ES6的语法。

1.什么是ECMAScript6

ECMAScript是浏览器脚本语言的规范,基于javascript来制定的。为什么会出现这个规范呢?

1.1.JS发展史
  • 1995年,网景工程师Brendan Eich 花了10天时间设计了JavaScript语言。
  • 1996年,微软发布了JScript,其实是JavaScript的逆向工程实现。
  • 1997年,为了统一各种不同script脚本语言,ECMA(欧洲计算机制造商协会)以JavaScript为基础,制定了ECMAscript标准规范
1.2.ECMAScript发展历史
  • 97年而后,ECMAScript就进入了快速发展期。1998年6月,ECMAScript 2.0 发布。

  • 1999年12月,ECMAScript 3.0 发布。这时,ECMAScript 规范本身也相对比较完善和稳定了,但是接下来的事情,就比较悲剧了

  • 2007年10月,ECMAScript 4.0 草案发布。这次的新规范,历时颇久,规范的新内容也有了很多争议。在制定ES4的时候,是分成了两个工作组同时工作的。

    一边是以 Adobe(flash,ps), Mozilla(火狐), Opera(浏览器) 和 Google为主的 ECMAScript 4 工作组。
    一边是以 Microsoft(微软)和 Yahoo(雅虎) 为主的 ECMAScript 3.1 工作组。

    ECMAScript 4 的很多主张比较激进,改动较大。而 ECMAScript 3.1 则主张小幅更新。最终经过 TC39 的会议,决定将一部分不那么激进的改动保留发布为 ECMAScript 3.1,而ES4的内容,则延续到了后来的ECMAScript5和6版本

  • 2009年12月,ECMAScript 5 发布。

  • 2011年6月,ECMAScript 5.1 发布。

  • 2015年6月,ECMAScript 6,也就是 ECMAScript 2015 发布了。 并且从 ECMAScript 6 开始,开始采用年号来做版本。即 ECMAScript 2015,就是ECMAScript6。

在这里插入图片描述

ES6就是javascript用的最多语言规范.被各大浏览器厂商实现了.

2.ES6语法规范

2.1.let & var

都是用来声明变量, let相较于var,他是块级的(局部)。

for(var i == 0 ; i < 10 ; ++){
    console.debug(i);
}
console.debug("i="+i);	//正常打印
------------------------------------
for(let i == 0 ; i < 10 ; ++){
    console.debug(i);
}
console.debug("i="+i);	//这里会报错,i会找不到
2.2.const

const声明常量不能修改 , 如同Java的final修饰符

const c = 4;
c = 5;	//编译报错,不能修改
2.3.解构表达式

简单理解,解构表达式就是将数组的元素或者对象的属性向变量赋值的一种简易写法

数组赋值

let arr = ["好","大"];
------------------------------------
console.debug(arr[0],arr[1]);	//以前的取值
------------------------------------

let [a,b] = arr;	//结构表达式数组赋值,定义了变量a,b并按照索引赋值。
console.debug(a,b);	

对象赋值

var user = {
    id: 1,
    username:"zs",
    age: 11
}
--------------------------------------
console.debug(user.id,user.username,user.age);	//以前的取值
--------------------------------------
var {id,username,age} = user;	//结构表达式,对象赋值,按照属性名赋值。
console.debug(id,username,age);

方法参数赋值

var user = {
    id: 1,
    username:"zs",
    age: 11
}
--------------------------------------
function showUser({id,username,age}){ 	//结构表达式,方法参数赋值,按参数名赋值。
	console.debug(id,username,age);
}
showUser(user);	//把user对象作为参数传给showUser方法	

注意:数组用 [ ] 赋值,对象用 { } 赋值

2.4.箭头函数

箭头函数是函数的一种简写

var user = {
    username:"zs",
    age:22,
    showUser:function(){	//以前定义方法的方式
        console.debug(this.username+" "+this.age);
    },
    //--------------------------------------
    showUser2:()=>{	//es6定义方法的方式
        //注意:这里的this指的是window对象了。不能用this.usename
		console.debug(user.username+" "+user.age);        
    },
    showUser3(){	//简写
        console.debug(user.username+" "+user.age);        
    }
}
user.showUser();
user.showUser2();
user.showUser3();
2.5.Promise对象

Promise是异步编程的一种解决方案,比传统的解决方案(回调函数+事件)更加合理和强大。 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。过Promise的构造函数来创建Promise对象,并在内部封装一个异步执行的结果。

  /**=======================================
     Promise 异步请求
     =======================================**/
    //1.执行异步请求
    const p = new Promise((resolve, reject) =>{
        //成功,调用 resolve 
        //失败,调用 reject
        // 这里我们用定时任务模拟异步
        setTimeout(() => {
            const num = Math.random();
            // 随机返回成功或失败
            if (num < 0.5) {
                //2.调用成功的结果回调
                resolve("成功!num:" + num)
            } else {
                //3.调用失败的结果回调
                reject("出错了!num:" + num)
            }
        }, 300)
    })
    // 调用promise
    p.then(function (msg) {
        //2.调用成功的结果回调
        console.log(msg);
    }).catch(function (msg) {
        //3.调用失败的结果回调
        console.log(msg);
    })
2.6.模块化

模块化通常是把一段JS代码通过export导出为公共的模块,其他地方通过import导入使用,实现代码复用的目的。

  • 定义三个文件
main.html
main.js
util.js
  • util.js
--------------方式一--------------------------------
export const util1 = {
    sum(a , b){
        return a + b;
    }
}
--------------或者---------
const util2 = { //面向对象思维
    /*sum:function (a,b){
        return a+b;
    }*/
    sum(a,b){
        return a+b;
    }
}
export {util2};
--------------方式二:导出多个----------------------
const util3 = {
    sum(a , b){
        return a + b;
    }
}

const util4 = {
    sum(a , b){
        return a + b;
    }
}
export {util3,util4};	//导出多个
---------------方式三:默认导出--------------------------
export default{
    sum(a,b){
        return a + b;
    }
}
  • main.js
//方式一: 的导入
import {util} from './util.js';
//util.sum(1,1)

//方式二:多个导入
import {util3,util4} from './util.js';

//方式三:默认导入
import {名字任意} from './util.js';



  • main.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Title</title>
</head>
<script src="./main.js" type="module"></script>
<script>
    alert(util.sum(1,1));   //运行会报错,浏览器不支持,要使用webpack之后才能运行
</script>
<body>

</body>
</html>

运行会报错,浏览器不支持,要使用webpack之后才能运行

2.7.总结
  • let
  • const
  • 结构表达式
  • 箭头函数
  • Promise
  • 模块化

二 .Vue入门

1.VUE介绍

1.1.Vue是什么

​ Vue (读音 /vjuː/,类似于 *view*) 是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

​ 渐进式框架: 就是用你想用或者能用的功能特性,你不想用的部分功能可以先不用。VUE不强求你一次性接受并使用它的全部功能特性

1.2.Vue的特点
  • 轻量
    Vue.js库的体积非常小的,并且不依赖其他基础库。

  • 数据双向绑定-回显简单
    对于一些富交互、状态机类似的前端UI界面,数据绑定非常简单、方便。

  • 指令
    内置指令统一为(v—*),也可以自定义指令,通过对应表达值的变化就可以修改对应的DOM。

  • 插件化
    Vue.js核心不包含Router(路由)、AJAX、表单验证等功能,但是可以非常方便地根据需要加载对应插件。

  • 组件化,他支持自定义标签[初学的时候比较难]
    组件可以扩展 HTML 元素,封装可重用的代码。允许我们使用小型、自包含和通常可复用的组件构建大型应用

1.3.MVVM思想–[面试的时候容易被问到]

Vue是一款开源的JavaScript MV*(MVVM、MVC)框架。
Vue 引入了MVVM (Model-View-ViewModel)模式,他不同于MVC架构.

  • M :即Model,模型,包括数据(json对象)和一些基本操作
  • V :即View,视图(html便签),页面渲染结果
  • VM:即View-Model,模型与视图间的双向操作(无需开发人员干涉)

在MVVM之前,开发人员从后端获取需要的数据模型,然后要通过DOM操作Model渲染到View中。而后当用户操作视图,我们还需要通过DOM获取View中的数据,然后同步到Model中。而MVVM中的VM要做的事情就是把DOM操作完全封装起来,开发人员不用再关心Model和View之间是如何互相影响的:

  • 只要我们Model发生了改变,View上自然就会表现出来。
  • 当用户修改了View,Model中的数据也会跟着改变。

把开发人员从繁琐的DOM操作中解放出来,把关注点放在如何操作Model上.

在这里插入图片描述

总结一下:MVVM的思想就是数据模型和视图的双向绑定,只要数据变化,视图会跟着变化,只要视图被修改,数据也会跟者变化。

2.入门

官方文档:https://cn.vuejs.org/

2.1.Vue安装和使用

创建一个静态的web项目 , 然后安装VUE , VUE官网地址:https://cn.vuejs.org/

使用CDN方式

Vue有两种使用方式,1是使用cdn或者本地方式直接引入JS库 ,2.使用Npm安装VUE库,第一种方式如下:

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

CDN(Content Delivery Network,内容分发网络)是由分布在不同地理位置的代理服务器及其数据中心组成的网络:

当然也可以手动下载该vue的JS库到本地项目,然后引入JS库

使用NPM安装VUE

  • 使用Terminal初始化 :npm init -y

    改名了是初始化NPM,会在项目中产生一个package.json文件。

  • 安装vue:

    全局安装(不推荐):npm install -g vue
    局部安装(推荐) :npm install vue
    安装成功后VUE的JS库:node_modules/vue/dist/vue.js

[注意] 项目的名称不能使用“vue”,不然会报错

npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具,也是世界上最大的软件注册表,里面包含超过600000 个 包的结构,能够使您轻松跟踪依赖项和版本。

2.2.Hello World程序

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:

创建vue-demo.html,目录结构如下:

vue-demo
	node_modules
	package.json
	package-lock.json
	pages
		vue-demo.html

vue-demo.html

<script type="application/javascript" src="../node_modules/vue/dist/vue.js"></script>
---------------------------------------------------
<body>
    <div id="app">
        <!--        取data中的数据-->
        {{ message }}
    </div>
</body>
---------------------------------------------------
<script type="application/javascript">
    var app = new Vue({
        //使用ID绑定vue到页面的元素
        el: '#app',
        //vue的数据
        data: {
            message: 'Hello Vue!'
        }
    })
</script>

Hello Vue!

2.3.VUE的el挂载

每个Vue实例通过el配置挂载的标签,该标签可以通过id或者是class挂载。 实例上的属性和方法只能够在当前实例挂载的标签中使用。

2.4.VUE的数据“data”
<body>
    <div id="app">
        <!--        取data中的数据-->
        {{ message }}
        <hr/>
        {{ user }}
        <hr/>
        {{ user.username }}	//取对象中的数据
    </div>
</body>
<script type="application/javascript">
    var app = new Vue({
        //使用ID绑定vue到页面的元素
        el: '#app',
        //vue的数据
        data: {
            message: 'Hello Vue!',	//普通数据
            user:{	//对象数据
                username:"zs",
                age:11
            }
        }
    })
</script>

注意:{{}}取值不能脱离VUE绑定的元素。

2.5.VUE的方法

所有的方法都在methods属性中定义,方法的调用可以通过在VUE绑定的页面元素中使用{{方法名()}} 的方式,也可以在js中通过VUE对象调用.

<body>
    <div id="app">
        <!--        取data中的数据-->
        取普通值:{{ message }}
        <hr/>
        取对象值:{{ user }}
        <hr/>
        取对象中的属性:{{ user.username }}
        <hr/>
        调用方法:{{showUser('参数')}}
    </div>
</body>
<script type="application/javascript">
    var app = new Vue({
        //使用ID绑定vue到页面的元素
        el: '#app',
        //vue的数据 ,所有的数据都在这里绑定
        data: {
            message: 'Hello Vue!',
            user:{
                username:"zs",
                age:11
            }
        },
        //vue的方法,所有的方法都在这里定义
        methods:{
            showUser(args){
                //这里的 this 代表 Vue对象
                console.log(this.user.username);
                console.log(this.user.age);
                console.log(args);
            }
        }
    })

    //调用vue方法
    app.showUser('我也是参数');
</script>
2.6 vue生命周期与钩子函数

在这里插入图片描述

1、beforeCreate(创建前):vue实例初始化之前调用
此阶段为实例初始化之后,此时的数据观察和事件配置都还没有准备好,而此时的实例中的data和el还是undefined状态,不可用的,dom元素也未加载,此时使用html片段代码我们加上ref属性,用于获取DOM元素的操作会报错,详细效果请使用代码测试。

注入:将methods、data等挂载到vue实例当中。

2、created(创建后):vue实例初始化之后调用
beforeCreate之后紧接着的钩子就是创建完毕created,此时我们能读取到data的值,但是DOM还没有生成,所以属性el还是不存在的,dom元素也未加载。

生成render函数,用来渲染。在挂载开始之前被调用:相关的 render 函数首次被调用

3、beforeMount(载入前):挂载到DOM树之前调用
此时的$el成功关联到我们指定的DOM节点,但是此时的DOM元素还未加载,如果此时在DOM元素中绑定数据使用{{name}}后里边的name不能成功地渲染出我们data中的数据

4、mounted(载入后):挂载到DOM树之后调用
挂载完毕阶段,到了这个阶段数据就会被成功渲染出来。DOM元素也加载出来了,html片段代码我们加上ref属性,可以获取DOM元素。

5、beforeUpdate(更新前):数据更新之前调用
当修改Vue实例的data时,Vue就会自动帮我们更新渲染视图,在这个过程中,Vue提供了beforeUpdate的钩子给我们,在检测到我们要修改数据的时候,更新渲染视图之前就会触发钩子beforeUpdate。html片段代码我们加上ref属性,用于获取DOM元素。Dom元素上的数据还没改变。

6、updated(更新后):数据更新之后调用
此阶段为更新渲染视图之后,此时再读取视图上的内容,已经是最新的内容。 此时加载的DOM元素上的数据更新了。

7、beforeDestroy(销毁前):vue实例销毁之前调用
调用实例的destroy()方法可以销毁当前的组件,在销毁之前,会触发beforeDestroy钩子。

8、destroyed(销毁后):vue实例销毁之后调用
成功销毁之后,会触发destroyed钩子,此时该实例与其他实例的关联已经被清除,它与视图之间也被解绑,此时再修改name的值,试图不在更新,说明实例成功被销毁了。

vue的生命周期:就是vue对象从创建到销毁的整个过程。

vue对象大概生命周期:创建–挂载-销毁,在这些阶段它提供了一些钩子函数,让我们可以在这些生命周期中做事情。 创建前,创建后,挂载前,挂载后,销毁前,销毁后等钩子,我们可以写函数挂载在钩子上面,到达对应的声明周期就能执行我们操作。

整个生命周期中,主动执行的函数,称为钩子函数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue声明周期</title>
    <script src="js/plugins/dist/vue.js"></script>
</head>
<body>
    <div id="myDiv"></div>
    <!--声明周期 从产生到销毁中间经历的过程就叫声明周期-->
    <script type="text/javascript">
        new Vue({
            el:"#myDiv",
            data:{

            },
            methods:{

            },
            //构造
            beforeCreate() {
            },
            created(){
                alert("created");
            },
            beforeMount(){

            },
            mounted(){
                //挂载完成后,就相当于js中window.onload,相当于jQuery中$(fuction(){}),就是挂载点里面所有
                //标签都已经加载了
                alert("mounted");
            }
        });
    </script>
</body>
</html>

三 VUE的表达式

1 表达式语法
  • VueJS表达式写在双大括号内:{{ expression }}。
  • VueJS表达式把数据绑定到 HTML。
  • VueJS将在表达式书写的位置"输出"数据。
  • VueJS表达式 很像 JavaScript 表达式:它们可以包含文字、运算符和变量。

实例 {{ 5 + 5 }} 或 {{ firstName + " " + lastName }}。

2 简单表达式

在{{ }}中可以进行简单的运算.

<div id="app">
	<!--简单表达式  -->
	<h1>{{num1+num2}}</h1>
	<!-- +:运算,字符串连接 -->
	<h1>{{5+"v5"}}</h1>
	<h1>{{5+"5"}}</h1>
	<!-- -:减法 -->
	<h1>{{"5"-"5"}}</h1>
	<h1>{{5*5}}</h1>
	<!-- *:-->
	<h1>{{"5"*"5"}}</h1>
	<!-- /-->
	<h1>{{5/5}}</h1>
	<h1>{{5/5}}</h1>
 </div>
---------------------------------------------------------------------------------------------------
var app = new Vue({
  //挂载到id=app元素上
  	el:"#app",
	data:{
       num1: 10,
       num2: 20
    },
});
3 三目运算符

在{{}}中的表达式可以使用data中数据 , 可以使用三元运算符,但是不能够使用其他语句

<div id="app">
	<!--三目运算  -->
	{{ show1?"真":"假"}}
</div>

var app = new Vue({
	el : "#app",
	data : {
		show1 : true
	}
});
4 字符串操作
  • 直接使用字符串字面值作为字符串对象
  • 使用data中的字符串对象
<div id="app">
    {{"这是字面值"}}<br/>
    {{"这是字面值".length}}<br/>
    {{message.length}}<br/>
    {{message.substring(1,5)}}<br/>
    {{message.substring(2,6).toUpperCase()}}<br/>
</div>


var app = new Vue({
	el: "#app",
	data: {
		message: "这是data中的数据"
	}
});
5 对象操作

在表达式中可以使用data中定义的对象的各种用法.像使用js对象中的方法和属性一样

<div id="app">
    {{user}}<br/>
    {{JSON.stringify(user)}}<br/>
    {{user.toString()}}<br/>
    {{user.name}}<br/>
    {{user.age}}<br/>
    {{user.getAge()}}<br/>
</div>

var user = {
	name: "张三",
	age: 29,
	getAge: function () {
		return this.age
	},
	toString:function(){
		return "姓名:"+this.name+",年龄:"+this.age;
	}
};
var app = new Vue({
	el: "#app",
	data: {
		user: user
	}
});
6 数组操作

在表达式中可以使用JavaScript数组中的任何语法来操作数组.

<div id="app">
    {{hobbys}}<br/>
    {{hobbys[0]}}<br/>
    {{hobbys.length}}<br/>
    {{hobbys.toString()}}<br/>
    {{hobbys.join("-")}}<br/>
</div>

var app = new Vue({
	el: "#app",
	data: {
		hobbys:["打游戏","踢足球",'泡MM',"泡GG"]
	}
});

四.VUE的指令

官方文档:https://cn.vuejs.org/v2/api/#v-text

指令是一个带有v-前缀的特殊标签属性, 指令属性的值预期是单个JavaScript表达式.

  • 作用: 当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
  • 一个标签元素上可以出现多个指令属性
  • 指令只能够出现在Vue对象所挂载的标签范围内的标签中

常用指令如下:

v-text=“表达式”  设置标签中的文本
v-html=“表达式”  设置标签中的html
v-for=“表达式”   循环
v-bind="函数" 绑定事件
v-model=“表达式” 数据双向绑定
v-show="布尔" 是否显示元素
v-if(else else if)=“表达式”    判断条件	
v-on=“表达式”    注册事件
1 v-text

给标签设置文本

  • 语法
<标签 v-text="textValue"></标签>
<div id="app">
    <span v-text="message"></span><br/>
    <span v-text="user.username"></span><br/>
</div>

var app = new Vue({
	el: "#app",
	data: {
		message: "<h1>这是一个Span!</h1>",
		user: {
			username: "lw"
		},
	}
});

给元素填充纯文本内容

2 v-html

给标签设置文本:通过data中的数据更新标签标签中的innerHTML属性的值.(标签中的HTML内容)

  • 语法
<标签 v-html="htmlValue"></标签>
<div id="app">
    <div v-html="message"></div>
</div>

var app = new Vue({
	el: "#app",
	data: {
		message: "<h1>这是HTMl代码</h1>"
	}
});

【注意】和v-text的区别是v-html会把内容的html符号进行渲染

3 v-for

循环:v-for可以作用于:数字,字符串,数组,对象

  • 语法一:普通用法
<标签 v-for="item in 数据源">{{item}}</标签>
  • 语法二:带索引
<标签 v-for="(元素,索引) in 数据源">{{元素}}=={{索引}}</标签>
  • 语法三:键,值,索引

[注意]这里的键是指对象的属性名,这种方式适合用来遍历对象的所有属性

<标签 v-for="(元素,键,索引) in 对象"></标签>
<div id="app">
    <h1>循环数组</h1>
    <ul>
        <li v-for="hobby in hobbys">{{hobby}}</li>
    </ul>
    <h1>遍历对象</h1>
    <ul>
        <li v-for="value in student">{{value}}</li>
    </ul>

    <h1>带索引循环数组</h1>
    <ul>
        <li v-for="(hobby,index) in hobbys">{{index}}--{{hobby}}</li>
    </ul>
    <h1>带键遍历对象</h1>
    <ul>
        <li v-for="(value,key,index) in student">{{index+1}}---{{key}}--{{value}}</li>
    </ul>
</div>

var app = new Vue({
	el: "#app",
	data: {
		hobbys : ["爬山","游泳","打豆豆","睡觉"],
		student : {
			name: "小毛",
			age: 29,
			sex: "男",
		},
		num : 10,
		str : "ronghuanet",
	}
});

学生列表案例

<div id="app">
	<table >
		<tr>
			<th>序号</th>
			<th>姓名</th>
			<th>年龄</th>
			<th>性别</th>
		</tr>
		<tr v-for="student in students">
			<td>{{student.id}}</td>
			<td>{{student.name}}</td>
			<td>{{student.age}}</td>
			<td>{{student.sex}}</td>
		</tr>
	</table>
</div>

var app = new Vue({
	el: "#app",
	data: {
		students: [
			{id:1,name: "刘备", age: 29, sex: "男"},
			{id:2,name: "貂蝉", age: 30, sex: "女"},
			{id:3,name: "吕布", age: 31, sex: "男"}
		]
	}
});
4 v-bind

属性绑定:将data中的数据绑定到标签上,作为标签的属性值.

  • 语法一
<标签 v-bind:标签属性名字="表达式"></标签>
  • 语法二:简写
<标签 :标签属性名字="表达式"></标签>
  • 语法三:为一个标签绑定一个对象作为该标签的多个属性
<标签 v-bind="对象"></标签>
<div id="app">
    <img src="xxx.jpg" />
    
    <img v-bind:src="imgsrc" v-bind:title = "title"/>
    <img :src="imgsrc" :title = "title"/>
    <input v-bind="props"/>
</div>

var app = new Vue({
	el: "#app",
	data: {
		imgsrc: "./img/1.jpg",
		title: "二哈!",
		props :{
			type: "text",
			name: "username",
		}
	}
});
5 v-model 指令

在表单控件上创建双向绑定,表单的值被修改时, 基于dom监听机制, 就会自动修改data中的数据中,

当data中的数据被修改时,基于数据绑定机制, 自动会把新的内容自动更新到value属性上. 页面视图也发生了改变. 双向绑定

v-model只作用于以下表单: input select textarea

<标签 v-model="表达式"></标签>
<div id="app">
  <h1>绑定到type=text的input表单元素</h1>
  姓名:<input type="text" v-model="inputValue"><br/>
  data中的值:{{inputValue}}

  <h1>绑定到type=checkbox的input表单元素</h1>
  打篮球:<input type="checkbox" v-model="checkboxValue" value="打篮球"><br/>
  踢足球:<input type="checkbox" v-model="checkboxValue" value="踢足球"><br/>
  data中的值:{{checkboxValue}}


  <h1>绑定到type=radio的input表单元素</h1>
  打篮球:<input type="radio" v-model="radioValue" value="打篮球"><br/>
  踢足球:<input type="radio" v-model="radioValue" value="踢足球"><br/>
  data中的值:{{radioValue}}

  <h1>绑定到textarea的元素</h1>
  个人简介:<textarea v-model="textareaValue"></textarea><br/>
  data中的值:{{textareaValue}}


  <h1>绑定到单选的select的元素</h1>
  技能:<select v-model="skills">
        <option value="java">java</option>
        <option value="php">php</option>
        <option value=".net">.net</option>
      </select><br/>
  data中的值:{{skills}}

</div>

var app = new Vue({
	el: "#app",
	data: {
		inputValue: "初始化的值",
		checkboxValue: ["踢足球"],
		radioValue: "打篮球",
		textareaValue: "你是一个优秀的软件工程师!",
		skills: "java",
	}
});
6 v-show

根据表达式之真假值,切换元素的 display CSS 属性。当条件变化时该指令触发过渡效果。当v-show的值为假时, 会在标签的css中添加 display: none

 <标签名 v-show="表达式"></标签名>
7 v-if
  • 语法一
<标签名 v-if="表达式"> ... </标签名>
<div id="app">
    <div v-if="show">你看到我了!</div>
    <div v-if="hidden">你看不到我了!</div>
    <div v-if="score>=90">优秀</div>
</div>

var app = new Vue({
	el: "#app",
	data: {
		"show":true,
		"hidden":true,
		"score":90,
	}
});
  • 语法二
 <标签名 v-if="表达式"></标签名>
 <标签名 v-else></标签名>
<div id="app">
    <div v-if="isVip">欢迎欢迎!!</div>
    <div v-else>滚动!!</div>
</div>

var app = new Vue({
	el: "#app",
	data: {
		isVip: true
	}
});
  • 语法三
<标签名 v-if="表达式"></标签名>
<标签名 v-else-if="表达式"></标签名>
<标签名 v-else-if="表达式"></标签名>
<标签名 v-else></标签名>
<div id="app">
    <div v-if="score>=90">优秀!!</div>
    <div v-else-if="score>=70">良好!!</div>
    <div v-else-if="score>=60">及格!!</div>
    <div v-else="score<60">不及格!!</div>
</div>

var app = new Vue({
	el: "#app",
	data: {
		score: 80
	}
});
8 v-on

使用v-on指令注册事件

<标签 v-on:事件句柄="表达式或者事件处理函数"></标签>
  简写方式
<标签 @事件句柄="表达式或者事件处理函数"></标签>
<div id="app">
  <h1>结果</h1>
    {{num}}
  <h1>表达式的写法</h1>
 <button v-on:click="num++">按钮</button><br/>
 <button @click="num++">按钮</button><br/>

 <h1>事件处理函数</h1>
 <button v-on:click="myclick">按钮</button><br/>
 <button @click="myclick">按钮</button><br/>
</div>

var app = new Vue({
	el: "#app",
	data: {
		num:0
	},
	methods:{
		myclick:function(){
			app.num++;
			console.log(this);
		}
	}
});

五 计算属性和watch

1 computed

有的时候我们需要在页面进行复杂的计算,复杂的计算导致页面很乱,Vue中提供了计算属性,来替代复杂的表达式:

<div id="app">
    <h1>您的生日是:{{birth}} </h1>
</div>
-----------------------------------------------------------------
var vm = new Vue({
    el:"#app",
    data:{
        birthday:1429032123201 // 毫秒值
    },
    computed:{
        birth(){// 计算属性本质是一个方法,但是必须返回结果
            const d = new Date(this.birthday);
            return d.getFullYear() + "-" + d.getMonth() + "-" + d.getDay();
        }
    }
})
2 watch

watch可以让我们监控一个值的变化。从而做出相应的反应。

<div id="app">
      <input type="text" v-model="message">
</div>
-------------------------------------------------------------
<script type="text/javascript">
    var vm = new Vue({
        el:"#app",
        data:{
            message:"xxxx"
        },
        watch:{
            message(newVal, oldVal){	//监听 message 的变化,调用该函数。
                console.log(newVal, oldVal);
            }
        }
    })
</script>

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

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

相关文章

linux上git的使用

目录 1.测试是否安装有git 2.下载项目到本地 3.三板斧 1.将代码放在创建的目录中 2.提交改动到本地 3.提交代码到远端 4.注意点 以及补充内容 1.测试是否安装有git 如果输入git --help 会显示下面一大串那么就是已经安装&#xff0c;否则需要自行手动安装 yum install g…

JavaScript的学习之DOM简介

目录 一、DOM是什么 二、节点是什么&#xff08;Node&#xff09; 三、代码示例 一、DOM是什么 DOM全称Document Object Model文档对象模型 文档&#xff1a;表示整个HTML网页文档 对象&#xff1a;表示网页中的每一个部分转换为一个对象 模型&#xff1a;表示对象之间的关系…

【计算机毕业设计】基于Springboot的网页时装购物系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

TDengine 3.2.3.0 集成英特尔 AVX512!快来看看为你增添了哪些助力

在当今的 IoT 和智能制造领域&#xff0c;海量时序数据持续产生&#xff0c;对于这些数据的实时存储、高效查询和分析已经成为时序数据库&#xff08;Time Series Database&#xff0c;TSDB&#xff09;的核心竞争力。作为一款高性能的时序数据库&#xff0c;TDengine 不仅采用…

Spring容器启动流程——refresh()单个方法分析

文章目录 Spring启动过程this()方法refresh()prepareRefresh()obtainFreshBeanFactory()prepareBeanFactory()postProcessBeanFactory()invokeBeanFactoryPostProcessorsregisterBeanPostProcessorsinitMessageSource()initApplicationEventMulticaster()onRefresh()registerLi…

面向对象六大设计原则--依赖倒置

目录 六大原则 定义 概念 Java语言中的表现 优点 在设计模式中体现 工厂方法模式 观察者模式 状态模式 示例 手机模块设计 五个示例 一、读取数据 二、发送消息 三、支付方式 四、日志记录 五、数据持久化 使用汽车驾驶进行说明 依赖的三种写法 1.构造函数…

从0开始C++(一):从C到C++

目录 c的基本介绍 C语言和C 的区别 面向过程和面向对象的区别 引用 引用使用的注意事项 赋值 终端输入 cin getline string字符串类 遍历方式 字符串和数字转换 函数 内联函数 函数重载overload 小练习&#xff1a; 参考代码 c的基本介绍 C是一种通用的高级编…

学习金字塔模型

学习金字塔模型由美国缅因州巴特尔教育研究所&#xff08;National Training Laboratories, Bethel, Maine&#xff09;开发&#xff0c;它展示了不同学习活动的平均知识保留率。这种方法可以帮助人们理解不同学习方式的有效性&#xff0c;从而更好地选择适合的学习方法。学习金…

数据库断言-数据库更新

数据库更新的步骤和查询sql的步骤一致 1、连接数据库 驱动管理器调用连接数据库方法&#xff08;传入url&#xff0c;user&#xff0c;password&#xff09;&#xff0c;赋值给变量 2、操作数据库 connection调用参数化方法&#xff0c;对sql语法进行检查&#xff0c;存储s…

新质生产力潮水里:谁在为中小企业搭起一座桥?

与其说华为云为中小企业提供的是一个个更具性价比和产业适配度的产品&#xff0c;更本质来看&#xff0c;其通过618营销季为中小企业提供了一个数字化转型升级的契机&#xff0c;基于此&#xff0c;企业可以在云计算和AI时代实现内在变革&#xff0c;焕发新的生机与活力。 作者…

Tomcat get请求传数组集合参数

前言 最近做项目&#xff0c;需要通过GET传参&#xff0c;来实现查询的能力&#xff0c;本来是RPC调用&#xff0c;直接参数序列化即可。但是服务最近修改为HTTP&#xff0c;本来Spring Cloud的feign也可以直接传参数&#xff0c;但是当使用Nginx访问时参数到底传啥呢&#xf…

微软将停用 App Center:React Native 开发人员应该使用以下工具

再见,应用中心!你好,EAS + Sentry + GitHub Actions! React Native 开发人员大遗憾:微软宣布将于 2025 年 3 月 31 日关闭Visual Studio App Center。 多年来, Infinite Red一直将 App Center 作为许多 React Native 咨询客户的 CI/CD 流程和开发工作流程的关键部分。它有…

零基础MySQL完整学习笔记

零基础MySQL完整学习笔记 1. 基础操作(必须会!)1.1 修改密码(4种方法)1.2 创建新用户1.3 导入数据库 2. SQL四种语言介绍2.1 DDL(数据库定义语言)2.2 DML(数据操纵语言)2.3 DCL(数据库控制语言)2.4 TCL(事务控制语言) 3. 数据库操作3.1 创建数据库3.2 查询数据库3.3 删除数据库…

SpringCloud分布式微服务链路追踪方案:Zipkin

创作博客的目的是希望将自己掌握的知识系统地整理一下&#xff0c;并以博客的形式记录下来。这不仅是为了帮助其他有需要的人查阅相关内容&#xff0c;也是为了自己能够更好地巩固和加深对这些知识的理解。创作的时候也是对自己所学的一次复盘和总结&#xff0c;在创作的过程中…

python爬虫需要什么HTTP代理?

用来爬虫的话&#xff0c;还是建议用高匿名代理&#xff0c;但显然题主用了高匿名代理还是出现了一部分问题&#xff0c;我们可以先找到问题关键再解决它&#xff0c;一般爬虫用了高匿名代理出现被封会有以下几种原因&#xff1a; 1.代理IP的质量不过关 一般来说每个网站都有…

AI写文章生成器,这些工具都可以一键智能生成文章

在AI技术快速发展的今天&#xff0c;AI写作生成器成为我们创作内容的重要工具&#xff0c;它可以提高我们的写作效率&#xff0c;节省时间和精力。下面小编就来和大家分享几款优秀的AI写作生成器&#xff0c;帮助你快速生成高质量的文章。 1.专业AI写作工具-文章在线生成器 专…

ChatGPT对那些带有残疾迹象的简历有偏见——但它可以改善

ChatGPT对那些带有残疾迹象的简历有偏见——但它可以改善 去年&#xff0c;华盛顿大学(University of Washington)研究生凯特•格拉兹科(Kate Glazko)在寻找研究实习机会时注意到&#xff0c;招聘人员在网上发布消息称&#xff0c;他们使用OpenAI的ChatGPT和其他人工智能工具来…

如何模拟一个具有网络管理功能的被测件的一些思路

不知道大家有没有遇到过这个问题&#xff1f; 当我们在学习如何测试网络管理时&#xff0c;难题不在于如何编写测试脚本&#xff0c;而是编写完测试脚本后&#xff0c;没有真实被测件来让我们执行测试脚本&#xff0c;进而调试脚本。这也是我在给大家讲CANoe工具和CAPL编程语言…

Android Media Framework(八)OMXNodeInstance - Ⅰ

OpenMAX框架的学习有两大难点&#xff0c;一是组件的状态切换与buffer的流转过程&#xff0c;这部分内容我们已经在IL Spec中学习过了&#xff1b;二是OMX组件使用的buffer类型与buffer分配过程&#xff0c;这一节我们来重点剖析OMX组件使用的buffer类型。 1、引言 在实际应用…

我原以为政务类网站不追求漂亮,打脸啦,漂亮得颠覆你认知。

我原本以为政务类网站一定时沉稳、工整、信息量大的&#xff0c;这些和漂流都关联不上&#xff0c;直到最近看了一些网站&#xff0c;发现我的认识狭隘了。 政务类网站的设计风格通常需要注重以下几个方面&#xff1a; 稳重和专业感&#xff1a; 政务类网站需要给人以稳重、正…