VUE教程(持续更新中)

VUE教程

目录

1. VUE简介

https://cn.vuejs.org/index.html

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

1-1. 技术发展的过程:

我们在技术的发展过程中,从服务端渲染的模式逐渐转换为前后端分离,前端逐渐工程化的发展不仅减少了后端的工作量,而且也使得一大批前端框架出现。因此,我们作为前端开发者,就要了解并学习如同Angular、vue、react一样的很多前端渐进式框架。因此你可以跟着白泽的文档继续学习,也可以点击上边的链接,去往vue的官方教程,相信我,每一种方式都会使你获益匪浅。

技术发展路径

服务端渲染 —> 前后端分离—>单页应用—>Vue框架

  • 服务端渲染

    • 后端渲染前端页面
  • 前后端分离

    • 前后端分离,整个页面渲染数据
  • 单页应用

    • 前后端分离的基础上,部分页面渲染页面内容
  • VUE框架

    • 运行包含vue的js,使用框架渲染部分页面内容

2. 使用VUE框架

2-1. 构建你的第一个VUE程序

  1. 安装VUE

    1. 方法1(npm):

      npm install vue
      
    2. 方法2(直接下载):

      开发版本: https://cn.vuejs.org/js/vue.js

      生产版本: https://cn.vuejs.org/js/vue.min.js

  2. 在你的页面引入VUE

    1. CDN

      <!--开发环境-->
      <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
      <!--生产环境-->
      <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
      <!--如果你使用原生 ES Modules,这里也有一个兼容 ES Module 的构建文件:-->
      <script type="module">
        import Vue from 'https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.esm.browser.js'
      </script>
      
      
    2. 引入你下载的文件

      <script src="../vue.js"></script>
      
  3. 构建你的第一个VUE程序

    <body>
        <!-- 模板--》 vue --》渲染真实DOM -->
        <div id="app">
            {{message}}白泽
        </div>
        <script src="../vue.js"></script>
        <script>
            var app = new Vue({
                // 创建的vue控制哪个内容
                el:"#app",
                // 页面中要显示的动态数据
                data:{
                    message:'hello'
                }
            })
        </script>
    </body>
    

    你将在页面中看到如下的内容:
    请添加图片描述

    此时你只需要在console控制台输入如下内容,便可以改变页面显示效果:

    app.message = "你好帅"
    

    显示效果如下:
    请添加图片描述

我们把以上这种可动态修改的数据成为响应式数据,即当数据发生改变时,页面将会重新进行渲染

  • 示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
                box-sizing: border-box;
            }
            ul{
                margin: 20px 40px;
                width: 400px;
                border: 1px solid #f40;
                padding: 20px 20px;
                border-radius: 10px;
            }
            li{
                background: #f40;
                color: white;
                padding: 20px 12px;
                margin: 20px 0px;
                border-radius: 5px;
            }
            .title{
                text-align: center;
            }
            button{
                cursor: pointer;
                background-color: #f40;
                border: none;
                color: white;
            }
        </style>
    </head>
    <body> 
        <div id="app">
            <ul>
                <li class="title">信息登记</li>
                <li v-for="(item,i) in person">
                    姓名:{{item.name}}
                    性别:{{item.sex}}
                    手机号:{{item.phone}}
                    点赞人数:{{item.like?item.like:'无'}}
                    <button @click="changeStock(item,item.like+1)"></button>
                    <button @click="changeStock(item,item.like-1)"></button>
                    <button @click="remove(i)">删除</button>
                </li>
            </ul>
            <p>总like人数{{total}}</p>
        </div>
        <script src="../vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
                // 数据
                data:{
                    person:[{
                        name:"张三",
                        sex:"男",
                        phone:"17283728172",
                        like:10
                    },{
                        name:"李四",
                        sex:"男",
                        phone:"18293828192",
                        like:9
                    },{
                        name:"Lisa",
                        sex:"女",
                        phone:"48278838382",
                        like:7
                    }]
                },
                // 计算属性
                computed:{
                    total(){
                        // 返回计算总like人数(可以使用循环person去加)
                        // reducer 逐个遍历数组元素,每一步都将当前元素的值与上一步的计算结果相加
                        return this.person.reduce((a,b) => a + b.like , 0);
                    }
                },
                // 方法
                methods:{
                    changeStock(person,newStock){
                        if(newStock < 0){
                            newStock = 0;
                        }
                        person.like = newStock;
                    },
                    remove(index){
                        // 从索引为idnex的位置删除1个元素
                        this.person.splice(index,1);
                    }
                }
            })
        </script>
    </body>
    </html>
    

    示例效果如下:

请添加图片描述

> 现阶段,你并不需要知道如上代码的实现原理,只需要知道,有了VUE以后,曾经需要循环和绑定的一些数据和事件,都会变得简单起来。而新的框架出现的意义正是让大家更方便的去创造和产出内容。

2-2.VUE核心原理

https://cn.vuejs.org/v2/guide/reactivity.html

简单来说,VUE的核心原理为虚拟DOM树。过程如下

  1. 创建实例

  2. 注入

  3. 首次渲染

    1. 编译生成虚拟DOM树

    2. 挂载

  4. 已挂载

在数据变动时,VUE将会重新进行渲染

  1. 重新生成虚拟DOM树

  2. 对比新旧两个DOM树的差异

  3. 将差异应用到真实DOM

  4. 完成渲染

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>VUE的一些核心概念</title>
    <!-- VUE会生成部分页面或者生成全部的页面(即,部分挂载或者全部挂载) -->
    <style>
        *{
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <div id="app">
        
    </div>
    <script src="../vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                author:"zhang",
                title:"this is a title"
            },
            // 这是一段恶心的代码 This is a disgusting piece of code(所有的代码最后都会渲染成为render,然后将虚拟节点树渲染 成为 真实的节点树)
            render(h){
                console.log("render");
                return h("div",[
                    h("h1",`first vue`),
                    h("p",`this is a ${this.author}`)
                ])
            },
            // This is also a disgusting piece of code
            template:`
            <div id="app">
                <h1>{{title}}</h1>
                <p>{{author}}</p>
            </div>
            `
        })
    </script>
</body>
</html>

2-3. VUE组件

这部分内容学习完成后,我们就可以开始构建一些简单的应用了,在后续的章节中,我会从项目入手,带大家逐渐熟悉VUE的其他新的特性,现在,让我们先来了解VUE的组件。

  1. 创建组件

    <div id="app"></div>
        <script src="../vue.js"></script>
        <script>
            //自定义一个组件
            var myButton = {
                data(){
                    return{
                        count:0,
                    };
                },
                template:`<button>当前点击了{{count}}次</button>`
            }
            var app = new Vue({
                data:{
    
                }
            })
            //这是另一种挂载目标元素的方法
            app.$mount("#app")
        </script>
    
    

    组件需要注意以下几点:

    • el

    • data必须是一个函数,该函数返回的对象为数据

    • 由于没有el配置,组件的虚拟DOM树必须在template或者render

  2. 注册组件

    1. 全局注册

      全局注册后,整个页面都可以使用这个组件

      Vue.component("组件名称","组件配置对象");
      Vue.component("Button1",myButton);
      Vue.component("Button2",{
          data(){
              return{
                  count:0,
              };
          },
          template:`<button>当前点击了{{count}}次</button>`
      });
      
      

      以下是一个小的DEMO

      <body>
          <div id="app"></div>
          <script src="../vue.js"></script>
          <script>
              // 定义一个组件
              var myButton = {
                  data(){
                      return{
                          count:0,
                      };
                  },
                  template:`<button @click="count++">当前点击了{{count}}次</button>`
              }
              // 注册组件
              // Vue.component("组件名称","组件配置对象");
              Vue.component("Button",myButton);
              // 使用注册的组件
              var app = new Vue({
                  data:{
                  },
                  template:`
                  <div>
                      <Button></Button>
                      <Button></Button>
                      <Button></Button>
                      <Button></Button>
                  </div>
                  `
              })
              app.$mount("#app")
          </script>
      </body>
      
    2. 局部注册

      局部注册

              // 定义一个组件
              var myButton = {
                  data(){
                      return{
                          count:0,
                      };
                  },
                  template:`<button @click="count++">当前点击了{{count}}次</button>`
              }
              // 使用注册的组件
              var app = new Vue({
                  data:{
                  },
                  template:`
                  <div>
                      <Button/>
                      <Button></Button>
                      <Button></Button>
                      <Button></Button>
                  </div>
                  `,
                  // 局部注册
                  components:{
                      // "组件名":"组件配置对象",
                      "Button":myButton
                  }
              })
      

      一下是一个小的DEMO

      <body>
          
          <div id="app"></div>
          <script src="../vue.js"></script>
          <script>
              // 定义一个组件
              var myButton = {
                  data(){
                      return{
                          count:0,
                      };
                  },
                  template:`<button @click="count++">当前点击了{{count}}次</button>`
              }
              // 使用注册的组件
              var app = new Vue({
                  data:{
                  },
                  template:`
                  <div>
                      <Button/>
                      <Button></Button>
                      <Button></Button>
                      <Button></Button>
                  </div>
                  `,
                  // 局部注册
                  components:{
                      // "组件名":"组件配置对象",
                      "Button":myButton
                  }
              })
              app.$mount("#app")
          </script>
      </body>
      
  3. 使用组件的注意事项

    1. 组件必须有结束

      <Button/>
      <Button></Button>
      <Button></Button>
      <Button></Button>
      
    2. 组件命名方式

      1. 大驼峰命名法PersonName

      2. 短横线命名法Person-Name

  4. 组件树

    1. VUE实例

      1. 组件1

        1. 组件3

        2. 组件3

      2. 组件2

        1. 组件1

          1. 组件3

          2. 组件3

  5. 向组件传递数据

    <body>
        <div id="app"></div>
        <script src="../vue.js"></script>
        <script>
            var Title = {
                props:["biaoti","neirong"],
                template:`<h1>{{biaoti}}{{neirong}}</h1>`
            };
            var app = new Vue({
                data:{
                    title1:"标题1"
                },
                components:{
                    "Title":Title
                },
                template:`
                <div>
                    <Title biaoti="标题1" neirong="demo1"/>
                    <Title biaoti="标题2" neirong="demo2"/>
                    <Title biaoti="标题3" neirong="demo3"/>
                </div>
                `
            })
            app.$mount("#app");
        </script>
    </body>
    

    需要注意的是组件的所有数据都是单向数据流,即谁的数据由谁来改。

2-4. 工程结构

请添加图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

师兄白泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值