Vue学习笔记(一)

# Vue的学习路线规划

1. Vue基础

2. Vue-cli

3. Vue-router

4. Vuex

5. Element-ui

6. Vue3

本文是作者跟着尚硅谷的张天禹老师的视频学习时做的笔记

# Vue是什么

**官网给出的定义如下:**

> 一套用于`构建用户界面`的渐进式`JavaScript`框架

- **什么是`构建用户界面`?**

就是把数据展示在页面的合适位置

- **什么是`渐进式`?**

*Vue可以自底向上逐层的应用。*

也就是说,假如我们要做一个简单的应用,那么我们只需要一个轻量的核心库就可以;

如果我们要做一个复杂的应用,那么我们可以引入各式各样的Vue插件来增强功能。

# Vue的特点

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

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

# 搭建Vue开发环境

## Vue的安装方式

1. **直接用`<script>`引入**

2. **NPM**

3. **命令行工具 (CLI)**

这里我们使用标签引入的方式来使用Vue

*首先,我们先创建一个文件夹,用vscode打开,接着我们在这个文件夹里再新建一个文件夹放入Vue官网给的两个js文件,不带min的为开发版本,带min的为生产版本,并新建一个文件夹新建自己的html文件*

*官方文档地址放这了,点击开发版本和生产版本即可下载两个js文件* https://cn.vuejs.org/v2/guide/installation.html

![image.png](/upload/2021/10/image-18074c776aa246579a893d9a3ea7be25.png)

然后在script标签中引入其中一个即可,这里引入的是开发版本的

```html

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

```

## chrome的Vue插件安装

国外的同学可以在chrome网上应用店可以搜到

国内的同学要在网上找到下面这个文件把它拖到chrome的扩展程序页面里就可以安装成功

![image.png](/upload/2021/10/image-5b57919a467143868744ff98365b1cb6.png)

接着在chrome的右上角把Vue开发工具固定在地址栏右边

![image.png](/upload/2021/10/image-08fc12f69a5148558c1b977fa89e35a5.png)

# Hello小案例

1. 先准备一个div容器,设置id值

2. 在script标签中创建Vue实例,并用el指定Vue实例为哪个容器服务

3. data中放入要使用的数据

4. div中用{{数据的key值}}取得数据并显示

```html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

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

</head>

<body>

    //准备好容器

    <div id="root">

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

    </div>

    <script>

        new Vue({

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

            el:'#root',

            //data中用于存储数据,数据供el所指定的容器去使用

    //data中的数据变化时,页面中有用到数据的地方也跟着变化

            data:{

                name:'ZhengBin'

            }

        })

    </script>

</body>

</html>

```

在页面中显示为

![image.png](/upload/2021/10/image-480b99e823774988ad251c3ddbee8e18.png)

## 注意事项

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

- {{js表达式}}中的js表达式可以自动读取到data中的所有数据

- 一旦data中的数据发生改变,那么页面中有用到该数据的地方也会自动改变

*区分:js表达式和js语句*

*1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方,例如`a`、`a+b`、`demo(1)`、`a === b ? x:y`

2.语句:例如if语句,for语句等*

# Vue模板语法

Vue模板语法分为两大类

1. 插值语法:

功能:用于解析标签体内容(标签体内容是在两个标签之间的内容)

写法:{{js表达式}},可以直接读取到data中的所有属性

2. 指令语法

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

举例:v-bind:href="xxx" 或简写为 :href="xxx",xxx同样要写成js表达式,且可以读取到data中的所有属性

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

关于指令语法,我们举个例子

例如,我们要在页面上弄个超链接,链接地址数据放在Vue实例的data中

```html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

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

</head>

<body>

    <!-- 准备好容器 -->

    <div id="root">

        <!-- 此处也可以简写为:href,但只有v-bind指令可以这样做 -->

        <a v-bind:href="url">跳转到百度</a>

    </div>

    <script>

        new Vue({

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

            el:'#root',

            //data中用于存储数据,数据供el所指定的容器去使用

            data:{

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

            }

        })

    </script>

</body>

</html>

```

说白了就是标签里的属性可以取到data里的值,不过要在属性前加`v-bind`或者`:`(可以简写为`:`的只有v-bind指令,其它的不行),另外指令语法也可以用在标签体内容、绑定事件

**额外补充一点**:

`取data中的属性时,可以有层级关系的取值`

例如,我们要取两个名字,一个是学生的名字,一个是学校的名字

```html

    <div id="root">

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

        <h1>{{name1}}</h1>

    </div>

```

如果这样写的话,那么我们在data中是不是得写一个name属性,一个name1属性?

我们可以这样做,把它改成

```html

    <div id="root">

        <h1>{{stu.name}}</h1>

        <h1>{{school.name}}</h1>

    </div>

```

同时在data中这样写

```html

    <script>

        new Vue({

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

            el:'#root',

            //data中用于存储数据,数据供el所指定的容器去使用

            data:{

                stu:{

                    name:'ZhengBin'

                },

                school:{

                    name:'xxx'

                }

            }

        })

    </script>

```

最终在页面中显示为

![image.png](/upload/2021/10/image-74df2beeb1ae48ff9440b7f0b17aae72.png)

# 单向数据绑定与双向绑定

单向数据绑定用的是`v-bind`指令

双向数据绑定用的是`v-model`指令

我们用`v-model`举个例子来告诉大家什么是双向绑定

```html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

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

</head>

<body>

    <div id="root">

        <!-- v-model:value此处可以简写为v-model -->

        <input type="text" v-model:value="age"/>

    </div>

    <script>

        new Vue({

            el:'#root',

            data:{

                age:23

            }

        })

    </script>

</body>

</html>

```

**注意输入框和data里的数据是一样的,当我们把输入框里的文字改变时,data里的数据也跟着一起改变**

![无标题.png](/upload/2021/10/%E6%97%A0%E6%A0%87%E9%A2%98-8cd6d19c7f64455c9c57e9800de93158.png)

![无标题1.png](/upload/2021/10/%E6%97%A0%E6%A0%87%E9%A2%981-3f8ae0798ab142fbb2c38a5b7915256a.png)

**而`v-bind`的单向数据绑定指的是只有data里的数据变化时,我们在页面中的数据跟着改变,当页面中的值改变时,data里的值不跟着改变**

**说白了单向绑定就是数据只能由data流向页面,而双向绑定是两边互流**

- 双向绑定一般都应有在表单类元素上(如input、select)

- `v-model:value`可以简写为`v-model`,因为`v-model`默认收集的是value值

# el与data的两种写法

1. el的两种写法

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

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

```html

    <script>

        const v=new Vue({

            // el:'#root'  第一种写法

            data:{

                age:23

            }

        })

        v.$mount('#root')  //第二种写法

    </script>

```

2. data的两种写法

(1)对象式

(2)函数式

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

一个重要的原则:由Vue管理的函数,使用到this指的是Vue实例。并且Vue管理的函数,一定不要写成箭头函数,一旦写了,this指的就不是Vue实例了

```html

    <script>

        const v=new Vue({

            el:'#root',

            //对象式

            // data:{

            //    age:23

            // }

            //函数式

            data(){

                return{

    age:23

}

            }

        })

    </script>

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容