Vue特点:
易用:熟悉HTML,CSS,JS,可以很快上手VUE
灵活:在一个库和一个完整框架之间伸缩自如
高效:20kb运行大小,超快虚拟DOM
1、el属性
:用于指定当前Vue实例为哪个容器服务,值通常为css选择器
。
2、data属性
:用于存储数据,数据供el所指定的容器去使用。
3、template属性
:用来设置模板,会替换页面元素,包括占位符。
4、methods属性
:放置页面中的业务逻辑,js方法一般都放置在methods中。
5、render属性
:创建真正的Virtual Dom。
6、computed属性
:用来计算,根据已经存在的属性计算出新的属性,对于同样的数据,会缓存。当其依赖属性的值发生变化是,这个属性的值会自动更新,与之相关的DOM部份也会同步自动更新。
7、watch侦听属性
:监听data中数据的变化,两个参数,一个返回新值,一个返回旧值,当你有一些数据需要随着其它数据变动而变动时或者执行异步操作或开销较大操作时,建议使用watch。
注意:
computed和methods的区别:
computed和watch的区别:
1、想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象
;
new Vue({配置对象})
2、html容器
里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;
<div id="root">
<h1>Hello,{{name}}h1>
div>
3、root容器里的代码被称为Vue模板
;
<div id="root">
<h1>Hello,{{name}}h1>
div>
4、Vue实例
和容器
是一一
对应的,一个Vue实例只能与一个容器对应,同样一个容器也只能对应一个Vue实例;
<!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script>
<!-- 容器 -->
<div id="demo">
<h1>Hello,{{name}}</h1>
</div>
<script type="text/javascript" >
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
//Vue实例
new Vue({
el:'#demo', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
data:{ //data中用于存储数据,数据供el所指定的容器去使用。
name:'AISMALL'
}
})
</script>
5、真实开发中只有一个Vue实例,并且会配合着组件一起使用;
6、{{xxx}}
中的xxx
要写js表达式
,且xxx也
可以自动读取到data中的属性
,一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新
;
注意区分:js表达式 和 js代码(语句)
1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:
(1). a
(2). a+b
(3). demo(1)
(4). x === y ? 'a' : 'b'
2.js代码(语句)
(1). if(){}
(2). for(){}
7、完整案例如下:
DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>初识Vuetitle>
<script type="text/javascript" src="../js/vue.js">script>
head>
<body>
<div id="demo">
<h1>Hello,{{name}h1>
div>
<script type="text/javascript" >
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
//创建Vue实例
new Vue({
el:'#demo', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
name:'AISMALL'
}
})
script>
body>
html>
下面介绍三种引入JS的方式:
第一种
:使用传统的js写法(原生JS)
<div id="msg"><div>
<script type="text/javascript">
//定义一个变量
var msg='hello world';
//获取div对象的id
var div=document.getElementById('msg');
//把msg内容填充到div标签内部
div.innerHTML=msg;
script>
第二种
:使用JQuery框架封装的JS写法
<div id="msg"><div>
<script type="text/javascript" src="js/jquery.js">script>
<script type="text/javascript">
var msg='hello world';
//通过#msg获取div标签id,然后把值填充到div标签
$('#msg').html(msg);
script>
第三种
:使用Vue框架封装的JS语法
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<div id="msg">
<div>{{MSG}}div>
<div>{{MSG + 666}}div>
div>
<script type="text/javascript" src="../js/vue.js">script>
<script type="text/javascript">
var vm = new Vue({
//使用# 获取标签id
el: '#msg',
//data 里面是要传入到标签里面的数据
data: {
//替换标签里面的值MSG
MSG: 'Hello Vue'
}
});
script>
body>
html>
分析:由于是学习VUE框架,接下来主要分析VUE框架的使用方法:
下载vue.js
的链接:https://cn.vuejs.org/v2/guide/installation.html
注意:vue框架有两种不同的版本
- vue.js(代码易于阅读,但是占用空间大):开发时使用
- vue.min.js(代码不易阅读,占用空间小) :部署时使用
VUE实例
参数分析:
el(element):元素的挂载位置(值可以是CSS选择器或者DOM元素)
- 通过这个配置属性可以将vue实例和html容器建立连接
- 如果html容器中配置的不是id属性,而是class属性,el中可以使用 .属性名称 的方式进行挂载
data:模型数据(值是一个对象),键值对的形式,可以写多个键值对
插值表达式语法
:将数据填充到HTML标签中
插值表达式支持基本的计算操作:
- 字符串拼接:<div>{{MSG + 666}}</div>
- 简单计算:<div>{{1+2}}</div>
Vue代码运行原理:
Vue语法
–>Vue框架解析
–>原生JS代码
模板语法分为两种:
插值语法
:简单的理解为将值
插入到指定标签的标签体
中。
功能
:用于解析标签体
内容。{{xxx}}
,xxx是js表达式,且可以直接读取到data中的所有属性。<h1>标签体内容h1>
<h1>{{xxx}}h1>
指令语法
:简单理解为给指定标签
添加标签属性
。
功能
:用于解析标签
(包括:标签属性
、标签体内容、绑定事件…)。v-bind:href="xxx"
或 简写为 :href="xxx"
,xxx同样要写js表达式,且可以直接读取到data中的所有属性。<h1 herf='标签属性'>标签体内容h1>
<h1 v-bind:herf='标签属性'>{{xxx}}h1>
<h1 :herf='标签属性'>{{xxx}}h1>
举例如下:
<script type="text/javascript" src="../js/vue.js">script>
<div id="root">
<h1>你好,{{name}}h1>
<a v-bind:href="url">{{webName}}01a>
<a :href="url">{{webName}}02a>
div>
<script type="text/javascript">
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
new Vue({
el:'#root',
data:{
name:'jack',
webName:'百度一下',
url:'www.baidu.com'
}
})
script>
Vue中有2种
数据绑定的方式:
单向绑定
(v-bind):数据只能从data流向页面。双向绑定
(v-model):数据不仅能从data流向页面,还可以从页面流向data。注意:
表单类元素上
(如:input、select等),因为可以从data中获取值
改变标签中的值,还可以通过用户输入值
改变标签的值,这样才可以称为双向。v-model:value
可以简写为 v-model,因为v-model默认收集的就是value值。举例如下:
<script type="text/javascript" src="../js/vue.js">script>
<div id="root">
单向数据绑定:<input type="text" v-bind:value="name"><br/>
双向数据绑定:<input type="text" v-model:value="name"><br/>
单向数据绑定:<input type="text" :value="name"><br/>
双向数据绑定:<input type="text" v-model="name"><br/>
div>
<script type="text/javascript">
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
new Vue({
el:'#root',
data:{
name:'AISMALL'
}
})
script>
插值语法存在的问题:闪动
如何解决该问题:使用v-cloak
插值指令
解决该问题的原理:先隐藏,替换好值之后再显示最终的值
用法:
DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title>
<style type="text/css">
/*1.*/
[v-cloak]{
display: none;
}
style>
head>
<body>
<div id="app">
<div v-cloak>{{msg}}div>
div>
<script type="text/javascript" src="../js/vue.js">script>
<script type="text/javascript">
var vm = new Vue({
el: '#app',
data: {
msg: 'Hello Vue'
}
});
script>
body>
html>
v-text:指令可以给标签赋值
直接写对应变量的名称
,就会直接将变量的值渲染到标签中。不要写插值语法
,因为写内容也会被v-text指定的内容替换掉。DOCTYPE html>
<html>
<head>
<title>v-texttitle>
<script type="text/javascript" src="../js/vue.js">script>
head>
<body>
<div id="app">
<p v-text="msg01">p>
<p v-text="msg02">
<p v-text="msg01">{{msg02}}p>
div>
<script>
new Vue({
el: '#app',
data: {
msg01: 'Hello Vue.js',
msg02:'hello Vue.js
'
}
});
script>
body>
html>
v-html:指令也可以给标签赋值,用法和v-text指令类似。
v-text与v-text的区别:
v-html会将其当html标签解析后输出
DOCTYPE html>
<html>
<head>
<title>v-htmltitle>
<script type="text/javascript" src="../js/vue.js">script>
head>
<body>
<div id="app">
<p v-html="msg01">p>
<p v-html="msg02">
<p v-html="msg01">{{msg02}}p>
div>
<script>
new Vue({
el: '#app',
data: {
msg01: 'Hello Vue.js',
msg02:'hello Vue.js
'
}
});
script>
body>
html>
可能存在安全问题
: 一般只在可信任内容上使用v-html,永不用在用户提交的内容上使用v-html。
DOCTYPE html>
<html>
<head>
<title>v-html安全性问题title>
<script type="text/javascript" src="../js/vue.js">script>
head>
<body>
<div id="root">
<div v-html="str">div>
<div v-html="str2">div>
div>
body>
<script type="text/javascript">
new Vue({
el:'#root',
data:{
str:'Hello Vue.js!
',
str2:'戳一下',
}
})
script>
html>
v-pre:指令让标签显示原始信息跳过编译过程。
用途:一些静态的内容不需要编译加这个指令可以加快渲染
DOCTYPE html>
<html>
<head>
<title>v-pre指令title>
<script type="text/javascript" src="../js/vue.js">script>
head>
<body>
<div id="root">
<h2 v-pre>Vue其实很简单h2>
<h2 v-pre>当前的n值是:{{n}}h2>
<h2 >当前的n值是:{{n}}h2>
<button @click="n++">点我n+1button>
div>
body>
<script type="text/javascript">
new Vue({
el:'#root',
data:{
n:1
}
})
script>
html>
v-once:指令顾名思义,执行一次性的插值
当数据改变时,插值处的内容不会继续更新。
DOCTYPE html>
<html>
<head>
<title>v-once指令title>
<script type="text/javascript" src="../js/vue.js">script>
head>
<body>
<div id="root">
<h2 v-once>初始化的n值是:{{n}}h2>
<h2>当前的n值是:{{n}}h2>
<button @click="n++">点我n+1button>
div>
body>
<script type="text/javascript">
new Vue({
el:'#root',
data:{
n:1
}
})
script>
html>
什么是双向数据绑定
当数据发生变化的时候,视图也就发生变化
当视图发生变化的时候,数据也会跟着同步变化
v-model是一个指令,限制在 、