Vue基础知识学习1

vue

本文基于B站尚硅谷的Vue学习教程,推荐大家去观看。

vue简介">一. Vue简介

Vue是一套用于构建用户界面的渐进式js框架,它的学习可以分为以下6个部分。

  1. Vue基础
  2. vue-cli
  3. vue-router
  4. vuex
  5. element-ui
  6. vue3

Vue有三个主要的特点:

  • 采用组件化模式,提高代码复用率、且让代码更好维护。

  • 声明式编码,让编码人员无需直接操作DOM,提高开发效率。

  • 使用虚拟DOM+优秀的Diff算法,尽量复用DOM节点。

理解组件化的含义,组件后缀为.vue,包括html,css,和js代码

这里推荐vue的官网,里面有文档和很多学习资源。

学习Vue之前要掌握的JavaScript基础知识包括ES6语法规范,ES6模块化,包管理器,原型、原型链,数组常用方法,axios,promise等等。

二. 搭建Vue开发环境

简单配置:

  1. 官网下载开发版本vue.js
  2. 浏览器安装vue devtools(一般浏览器插件库里可以搜到)
  3. 在html文件对vue.js进行引用即可完成一些简单的实验。

三. vue的知识点

1. vue的入门常识

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>vue模板语法</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!--

初识Vue:

1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象;

2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法;

3.root容器里的代码被称为Vue模板;

4.Vue实例和容器是一一对应的;

5.真实开发中只有一个Vue实例, 并且会配合着组件一起使用;

6.{{xxx}}中的xxx要写js表达式,且xx可以自动读取到data中的所有属性;

7.且data中的数据发生改变,那么模板中用到该数据的地方也会自动更新;

-->

<!-- 创建一个容器 为Vue提供模板,展示Vue的工作成果 -->

<div id="root">

<h2>hello {{name}} {{school.address}}</h2> <!-- {{}}是分隔符(插值语法) 里面需要是js表达式-->

</div>

<script type="text/javascript">

//修改全局配置

Vue.config.productionTip=false;//阻止Vue在启动时生成生产提示

//创建Vue实例

// const x= Vue实际上是一个构造函数

new Vue({

el:\'#root\', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串

data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象

name:\'hhh\',

school:{

name:\'法拉希\',

address: \'北京西路\',

}

}

});//只传一个参数——配置对象

//容器和实例是一一对应的关系

</script>

</body>

</html>

2. 两大类模板语法

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>vue模板语法</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!--

Vue模板语法有2大类:

1.插值语法:

功能:用于解析标签体内容。

写法: {{xxx}}, xxx是js表达式,且可以直接读收到data中的所有属性。

2.指令语法:

功能:用于解析标签(包括:标签属性、标签体内容、绑定事件.....)。

举例: v-bind:href="xxx" 或简写为 :href="xxx", xxx同样要写js表达式,

且可以直接读取到data中的所有属性。

备注: Vue中有很多的指令,且形式都是: v-????,此处我们只是拿v-bind举个例子。

-->

<div id="root">

<h1>插值语法</h1>

<h2>hello {{name}} {{school.address}}</h2> <!-- {{}}是分隔符(插值语法) 里面需要是js表达式-->

<h1>指令语法</h1>

<a v-bind:href="url">百度</a> <!--动态绑定 url就变成了js表达式-->

<a :href="url.toUpperCase()">百度</a>

</div>

<script type="text/javascript">

//修改全局配置

Vue.config.productionTip=false;

//创建Vue实例

// const x= Vue实际上是一个构造函数

new Vue({

el:\'#root\', //el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串

data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象

name:\'hhh\',

url:\'http://www.baidu.com\',

school:{

name:\'法拉希\',

address: \'北京西路\',

}

}

});

</script>

</body>

</html>

3. 数据绑定

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>vue2数据绑定</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!--

Vue中有2种数据绑定的方式:

1.单向绑定(v-bind):数据只能从data流向页面。

2.双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。

备注:

1.双向绑定都应用在表单类元素上(如: input、 select等)

2.v-model:value可以简写为v-model,因为v-model 默认收集的就是value值。

-->

<div id="root">

单向数据绑定:<input type="text" v-bind:value="name"><br/>

双向数据绑定:<input type="text" v-model:value="address">

<!-- 简写-->

单向数据绑定:<input type="text" :value="name"><br/>

双向数据绑定:<input type="text" v-model="address">

<!-- v-model只能应运用在表单类元素上(输入类元素),对value进行修改-->

</div>

</body>

<script type="text/javascript">

Vue.config.productionTip=false;

new Vue({

el:\'#root\',

data:{

name:\'hhh\',

address:\'French\',

}

})

</script>

</html>

4. el和data的两种写法

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>vue2数据绑定</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<div id="root">

单向数据绑定:<input type="text" v-bind:value="name"><br/>

双向数据绑定:<input type="text" v-model:value="name">

</div>

</body>

<!--

data与e1的2种写法

1.e1有2种写法

(1).new Vue时候配置el属性。

(2).先创建Vue实例,随后再通过vm.$mount(\'#root\')指定e1的值。

2. data有2种写法

(1).对象式

(2).函数式

如何选择:目前哪种写法都可以,以后学习到组件时,data必须使用函数式,否则会报错

3.一个重要的原则:

由Vue管理的函数如data(),一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。

-->

<script type="text/javascript">

Vue.config.productionTip=false;

// el的两种写法

const v=new Vue({

// el:\'#root\', //第一种方法

data:{

name:\'并发地\',

}

})

//延时器 实例与容器相配的第二种方法 称为挂载,会更加灵活一些

setTimeout(()=>{

v.$mount(\'#root\'); //成功了,两秒之后动态

},2000);

//data的两种写法

new Vue({

el:\'#root\',

// 第一种方法 对象式

/*data:{

name:\'并发地\',

}*/

//第二种方法 函数式 写成data()也可以

data:function (){

console.log(\'$$\',this);

return{

name:\'啦啦啦\'

}

}

})

</script>

</html>

5. MVVM模型

  • Model:对应data中的数据

  • View:模板,也就是用户界面

  • ViewModel:视图模型,也就是Vue实例对象,模型通过它可以将数据绑定到页面上,视图可以通过它将数据映射到模型上。

    MVVM的优点?

    1. 低耦合。视图(View)可以独立于Model变化和修改。
    2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
    3. 前后端分离。开发人员可以专注于业务逻辑(ViewModel)和数据的开发,设计人员可以专注于页面设计。

    视频里的图示特别清晰明了

示例代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>MVVM模型</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!-- vm(Vue实例对象)和Vue原型对象上所有的属性和方法在模板中都能被识别到-->

<div id="root">

<h1>{{name}}</h1>

<h1>{{address}}</h1>

<h1>测试1{{1+1}}</h1>

<h1>测试2{{$options}}</h1>

<h1>测试3{{$emit}}</h1>

<h1>测试4{{_c}}</h1>

</div>

</body>

<script type="text/javascript">

Vue.config.productionTip=false;

const vm=new Vue({

el:\'#root\',

data:{

name:\'rered\',

address: \'beijing\',

a:1

}

})

</script>

</html>

6. Object.defineProperty

示例代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Object.defindProperty</title>

</head>

<body>

<script>

let number=18;

let person={

name:\'张三\',

sex:\'男\',

}

//给相应对象添加相对属性

Object.defineProperty(person,\'age\',{

value:18,

enumerable:true,//控制属性是否可枚举

writable:true,//控制属性是否可被修改,默认为false

configurable:true,//控制属性是否可被删除

//当读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值

get:function (){

return number;

},

//当修改person的age属性时,setter就会被调用,且会收到修改的具体值

set(value){

console.log();

number=value;

}

//双向绑定的原理,面试常问,类似于java中的类的修改器和访问器

});

console.log(Object.keys(person));

console.log(person);

</script>

</body>

</html>

7. 数据代理

示例代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>什么是数据代理</title>

</head>

<body>

<!--

数据代理:通过一个对象代理对另一个对象中属性的操作(读写)

比如这里,obj2可以对obj中的属性进行操作,即代理

-->

<script type="text/javascript">

let obj={x:100};

let obj2={y:200};

Object.defineProperty(obj2,\'x\',{

get(){

return obj.x;

},

set(value){

obj.x=value;

}

})

</script>

</body>

</html>

Vue中的数据代理

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Vue中的数据代理</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!--

1.Vue中的数据代理:

通过vm对象来代理data对象中属性的操作(读/写)

2.Vue中数据代理的好处:

更加方便的操作data中的数据

3.基本原理:

通过0bject.defineProperty()把data对象中所有属性添加到vm上。

为每个添加到vm上的属性,都指定个getter/setter。

在getter/setter内部去操作(读/写) data中对应的属性。

-->

<div id="root">

<h1>{{name}}</h1>

<h1>{{address}}</h1>

</div>

</body>

<script type="text/javascript">

Vue.config.productionTip=false;

const vm=new Vue({

el:\'#root\',

data:{

name:\'rered\',

address: \'beijing\',

a:1,

}

})

</script>

</html>

如图,本来应该写成{{_data.name}}的形式,但由于有数据代理,于是上面的代码中可以直接写成{{name}}去获取属性值,可以看到底下有data中各个属性的get和set。

8. Vue中的事件

(1)事件处理

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>事件处理</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!--

事件的基本使用:

1.使用v-on:xXx或@xx绑定事件,其中xxx是事件名:

2.事件的回调需要配置在methods对象中,最终会在vm上;

3. methods中配置的函数,不要用箭头函数!否则this就不是vm了,就变成windows了;

4. methods中配置的函数,都是被Vue所管理的函数,this的指向是vm或组件实例对象;

5. @click=" demo"和@click= "demo($event)"效果一致, 但后者可以传参;

所有被Vue管理的函数尽量写成普通函数,而不是箭头函数。

vm只会为data中的数据做代理,所以回调函数不要写到data中,那样会给vue造成负担。

-->

<div id="root">

<h1>啦啦啦你好!{{name}}</h1>

<button v-on:click="showInfo1">提示信息1(不传参)</button>

<button @click="showInfo2(66,$event)">提示信息2(传参)</button>

</div>

</body>

<script type="text/javascript">

Vue.config.productionTip=false;

const vm=new Vue({

el:\'#root\',

data:{

name:\'rered\',

address: \'beijing\',

a:1

},

//可以配置很多事件的回调

methods:{

//传了个事件对象

showInfo1(event){

alert(\'tonxuenihao1\');

console.log(event.target.innerText);

console.log(this);//就是Vue实例对象vm

},

showInfo2(number,event){

alert(\'tonxuenihao2\');

// console.log(event.target.innerText);

// console.log(this);//就是Vue实例对象vm

console.log(number,event);

}

}

})

</script>

</html>

(2)事件修饰符

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>事件修饰符</title>

<script type="text/javascript" src="vue.js"></script>

<style>

*{

margin-top: 20px;

}

.demo1{

height: 50px;

background-color: skyblue;

}

.box1{

padding: 5px;

background-color: skyblue;

}

.box2{

padding: 5px;

background-color: orange;

}

.list{

width: 200px;

height: 200px;

background-color: peru;

overflow: auto;

}

li{

height: 100px;

}

</style>

</head>

<body>

<!--

捕获由外到内,冒泡由内到外,在冒泡阶段处理事件

Vue中的事件修饰符:

1.prevent:阻止默认事件(常用) ;

2.stop:阻止事件冒泡(常用) ;

3.once: 事件只触发一次(常用) ;

4.capture:使用事件的捕获模式;

5.self:只有event.target是当前操作的元素时才触发事件;

6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕;

主要记住前三个,后三个作为拓展

修饰符可以连续写,比如@click.prevent.stop

-->

<div id="root">

<h1>啦啦啦你好!{{name}}</h1>

<!-- //使用prevent就阻止了默认事件-->

<a href="http://www.baidu.com" @click.prevent="showInfo">点我提示信息</a>

<!-- 阻止事件冒泡(常用) stop-->

<div class="demo1" @click="showInfo">

<button @click.stop="showInfo">点我冒泡</button>

</div>

<!-- once: 事件只触发一次(常用)-->

<button @click.once="showInfo">点我冒泡</button>

<!-- 使用事件的捕获模式-->

<div class="box1" @click.capture="showMsg(1)">

div1

<div class="box2" @click="showMsg(2)">

div2

</div>

</div>

<!-- 只有event.target是当前操作的元素时才触发事件-->

<div class="demo1" @click.self="showInfo">

<button @click="showInfo">点我呀呀呀</button>

</div>

<!-- 事件的默认行为立即执行,无需等待事件回调执行完毕-->

<!-- 滚动有两个单词 scroll(滚动条) and wheel(滚轮)-->

<ul class="list" @wheel="demo">

<li>1</li>

<li>2</li>

<li>3</li>

<li>4</li>

</ul>

</div>

</body>

<script type="text/javascript">

Vue.config.productionTip=false;

const vm=new Vue({

el:\'#root\',

data:{

name:\'rered\',

address: \'beijing\',

a:1

},

methods:{

showInfo(e){

// alert("同学你好!");

console.log(e.target);

},

showMsg(msg){

console.log(msg);

},

demo(){

console.log(\'@\');

}

}

})

</script>

</html>

(3)键盘事件

示例代码

<!DOCTYPE html>

<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml">

<head>

<meta charset="UTF-8">

<title>键盘事件</title>

<script type="text/javascript" src="vue.js"></script>

</head>

<body>

<!-- 记住常用的按键

1.Vue中常用的按键别名:

回车=> enter

删除

=> delete (捕获“删除”和“退格”键)

退出=> esc

空格=> space

换行

=> tab 适合keydown

上=>up

下=>down

左=> left

右=> right

2.Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)

3.系统修饰键(用法特殊) : ctrl、alt、 shift、 meta

(1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。

(2) .配合keydown使用:正常触发事件。

4.也可以使用keyCode去指定具体的按键(不推荐)

5. Vue. config. keyCodes.自定义键名=键码,可以去定制按键别名

-->

<div id="root">

<h1>啦啦啦你好!{{name}}</h1>

<input type="text" placeholder="回车提示输入" @keyup="showInfo">

</div>

</body>

<script type="text/javascript">

Vue.config.productionTip=false;

Vue.config.keyCodes.huiche=13;//相当于定义了回车的别名

const vm=new Vue({

el:\'#root\',

data:{

name:\'rered\',

address: \'beijing\',

a:1

},

methods:{

showInfo(e){

console.log(e.key,e.keyCode);

//可以加个判断是否是回车按键再进行输出,或者在前面@keyup.enter

if(e.keyCode!==13)

return ;

console.log(e.target.value);

},

}

})

</script>

</html>

以上是 Vue基础知识学习1 的全部内容, 来源链接: utcz.com/z/379233.html

回到顶部