05、Vue基础(html中使用vue)
Vue官网:点击链接1、Vue简介Vue,读音类似于view,是一套用于构建用户界面的渐进式的js框架,发布于2014年2月;Vue结合了HTML+CSS+JS,有很好的生态系统,Vue体积小,速度快,优化到位,与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用;Vue的核心库只关注视图层,易于上手,便于与第三方库(如:vue-router,vue-resourc...
Vue官网:点击链接
源码:htmlvue
一、Vue介绍
Vue简介
- Vue,读音类似于view,是一套用于构建用户界面的渐进式的js框架,发布于2014年2月;
- Vue结合了HTML+CSS+JS,有很好的生态系统,Vue体积小,速度快,优化到位,
- 与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用;
- Vue的核心库只关注视图层,易于上手,便于与第三方库(如:vue-router,vue-resource,vuex)或既有项目(SSM)整合;
二、MVVM
1、MVVM模式的实现者--双向数据绑定模式
- Model:模型层,这里表示JavaScript对象;
- View:视图层,这里表示DOM(HTML操作的元素)
- ViewModel:连接视图和数据的中间件,Vue.js就是MVVM中的ViewModel层的实现者;
MVC: M model V view C controller
MVVM:M model V view VM viewmodel:连接视图和数据的中间件
在MVVM架构中,是不允许数据和视图直接通信的,只能通过ViewModel来通信,ViewModel定义了一个Observer观察者:
- ViewModel 能够观察到数据的变化,并对视图对应的内容进行更新;(发现数据变了,通知视图变化)
- ViewModel 能够监听到视图的变化,并能够通知数据发生改变;(发现视图变了,通知数据变化)
- Vue.js是一个MVVM的实现者,核心是实现了DOM监听与数据绑定;
- 通过VM实现了双向数据绑定;
其他MVVM实现者:
- AngularJS
- ReactJS
- 微信小程序
要想在页面里面使用vue框架(vue是js框架),要在页面中引入vue的js文件,在页面中引入vue两种方式:
1)引入工程内的vue的js文件
2)引入外部网络提供的vue的js文件,最好使用离服务器较近的cdn(内容分发网络)的vue.js
cdn内容分发网络
是一种加速策略,能够从离自己最近的服务器上快速的获得外部的资源
组件化
- 页面上每个独立的可交互的区域视为一个组件;
- 每个组件对应一个工程目录,组件所需的各种资源在这个目录下就近维护;
- 页面不过是组件的容器,组件可以嵌套自由组合(复用)形成完整的页面;
三、快速开始
1、在页面引入vue的js文件
注意:cdn是一种加速策略,能够快速的提供js文件
获取vue的cdn文件:https://www.bootcdn.cn/vue/
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
2、在页面中绑定vue元素
创建一个div,id是app;
3、创建vue对象,设计对象的内容
其中该vue对象,绑定了页面中id是app的那个div;没有被绑定的div,是不能被vue操作的;
4、在页面的元素中,使用插值表达式,来使用vue对象中的内容
- 在html的被vue绑定的元素中,通过插值表达式来获取vue对象中的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>快速入门</title>
<!--样式设置-->
<style type="text/css">
p.tip span {
font-weight: bold;
color: #cf3b5c;
}
</style>
</head>
<body>
<div id="app">
<h1>我的静态页面1</h1>
<span>
{{title}}
</span>
<input type="text" v-model="title"/>
<p>欢迎你,年龄是{{age}}的{{name}}</p>
<!--p,段落;span,给行内元素设置样式-->
<p class="tip"><span>提示:</span>... ... ...</p>
</div>
</body>
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
// 该vue对象,绑定了页面中id是app的那个div
new Vue(
{
el: '#app', //element
// 数据哪里来?
data: {
title: 'hello nikey', //以后,数据是通过发送ajax请求,来获得的
name:'小明',
age:18
}
} // json格式的对象,使用大括号包裹,里面放了键值对,在js中键可以没有引号,多个键值对之间使用,分隔
);
</script>
</html>
效果:在input输入框中输入文字,<span>行内元素{{title}}的值动态变化;
vue对象里有哪些东西,分别是什么作用?
new Vue({
el:'' 该vue对象绑定在哪个div上
data:{
} 提供数据的,里面存放键值对
});
四、差(插)值表达式
作用:在view中,获得model中的内容;
差值表达式,是用在html中被绑定的元素中的,目的是通过差值表达式来获取vue对象中的属性和方法;
语法格式:{{vue的内容}}
注意:差值表达式不能写在html的标签中,不能作为属性的值的部分;
vue对象中的属性是哪里提供的?
new Vue({
data:{} <==这个data就提供了属性
})
vue对象中的方法是哪里提供的?
new Vue({
methods:{ <==这个methods提供了方法
sayHi:function(){
}
}
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>差值表达式</title>
</head>
<body>
<div id="app">
我是一位{{major}}的程序员<br/>
{{[0,1,2,3,4][1]}}<br/>
{{ {name:'小明',age:20}.name }}<br/>
{{ sayHi() }}
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
major:'java'
},
methods:{
sayHi:function(){
alert("hello vue!");
return "hello vue2";
}
}
}
);
</script>
</html>
五、Vue中的关键字
这些关键字,都是作为html页面的标签中的属性;
1、MVVM双向数据绑定:v-model
将标签的value值与vue实例中的data属性值进行绑定;
<input type="text" v-model="major"/>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue中的关键字v-model</title>
</head>
<body>
<div id="app">
请输入您的专业:<input type="text" v-model="major"/>
<p>我的专业是: {{major}}</p>
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
major:'java'
}
}
);
</script>
</html>
效果:在输入框输入javaweb,下面的专业也在变化
2、事件绑定:v-on
通过配合具体的事件名,来绑定vue中定义的方法;
- v-on,是绑定事件;事件是input;响应行为是changeMajor;
- 当input元素发生输入事件时,就会调用vue里定义的changeMajor方法
<input type="text" v-on:input="changeMajor"/>
- 在响应函数里,可以指明使用event内置的参数对象;
- event.target.value 获取当前事件的对象(input元素)的value值;
- 此时的this,指的是当前vue对象;如果在method里想使用当前vue对象的属性和方法,必须加上this;
changeMajor:function (event) {
this.major = event.target.value;
}
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Vue中的关键字v-on</title>
</head>
<body>
<div id="app">
请输入您的专业: <input type="text" v-on:input="changeMajor"/><br/>
我的专业是: {{major}}
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
major:''
},
methods:{
changeMajor:function (event) {
this.major = event.target.value;
}
}
}
);
</script>
</html>
3、事件绑定简化版:使用@替换v-on:
<input type="text" @input="changeMajor"/>
<input type="text" v-on:input="changeMajor"/>
4、HTML标签(属性的内容)绑定vue的属性:v-bind
html里的所有属性,都不能使用插值表达式;下面的写法是错误的:
<a href="{{link}}">百度</a>
如果一定要用vue中的属性作为html标签的属性的内容,可以通过v-bind进行属性绑定;
v-bind:href 可以简写成 :href
<div id="app">
<a href="https://www.baidu.com/">百度1</a><br/>
<a v-bind:href="link">百度2</a><br/>
<a :href="link">百度3</a>
</div>
<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Vue中的关键字v-bind</title>
</head>
<body>
<div id="app">
<a href="https://www.baidu.com/">百度1</a><br/>
<a v-bind:href="link">百度2</a><br/>
<a :href="link">百度3</a>
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
link:'https://www.baidu.com/'
}
}
);
</script>
</html>
点击链接,都可以跳转到百度网页:
5、差值表达式只获取一次数据:v-once
该标签中的差值表达式,只获取一次数据,之后数据的变化,不影响此差值表达式的值;
<span v-once>{{major}}</span>
<!DOCTYPE html>
<html lang="en" xmlns:v-once="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Vue中的关键字v-once</title>
</head>
<body>
<div id="app">
请输入您的专业: <input type="text" v-model="major"/><br/>
我的专业1: <span>{{major}}</span><br/>
我的专业2: <span v-once>{{major}}</span>
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
major:'java'
}
}
);
</script>
</html>
6、v-html 和 v-text
v-html:与innerHTML功能相似;html的标签会被解析;将vue中的属性的值作为html的元素来使用;
<p v-html="finishedlink"></p>
v-text:文本显示,html标签不被解析;将vue中的属性的值只作为纯文本来使用;
<p v-text="finishedlink"></p>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue中的关键字v-html和v-text</title>
</head>
<body>
<div id="app">
<p v-html="finishedlink"></p>
<p v-text="finishedlink"></p>
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
finishedlink:"<a href=\"https://www.baidu.com/\">百度1</a><br/>"
}
}
);
</script>
</html>
六、事件
1、事件绑定
功能:点击按钮,数字自增1;
<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>事件绑定范例</title>
</head>
<body>
<div id="app">
<button type="button" @click="addbtnfn">增加</button>
<p> {{counter}} </p>
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
<script>
new Vue(
{
el: '#app',
data: {
counter:0
},
methods:{
addbtnfn:function () {
this.counter += 1;
}
}
}
);
</script>
</html>
2、参数传递
3、停止鼠标事件
4、事件修饰符
七、vue改变内容--虚拟dom和diff算法
更多推荐
所有评论(0)