Vue 核心

Posted A-L-Kun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 核心相关的知识,希望对你有一定的参考价值。

文章目录

Vue 核心(一)

一、 Vue 简介

1、 概述

Vue是一套用于构建用户界面渐进式 javascript 框架。

渐进式:Vue 可以自底向上逐层的应用。

  • 简单应用:只需一个轻量小巧的核心库
  • 复杂应用:可以引入各式各样的 Vue 插件

如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但无论是代码量还是流程规范性都是前者较优。

Vue 的特点:

  1. 采用组件化模式,提供代码复用率、且让代码更好维护
  2. 声明式编码,让编码人员无需操作 DOM,提高开发效率
  3. 使用虚拟 DOM + 优秀的 Diff 算法,尽量复用 DOM 节点

官方网站地址:https://cn.vuejs.org/

我们在最开始学习时会通过script标签来直接引入 Vue;后期会使用脚手架来安装 Vue

2、 学前准备

学习 Vue 之前需要掌握的 JS 基础知识:

3、 第一个程序

我们首先在资源下载处安装我们的 Vue.js ,然后在 html 文件中引入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始Vue</title>
<!--    引入Vue-->
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>Hello World</h1>
</div>
</body>
</html>

在提示中,要求我们安装 Dev 开发者工具:

VueDevTools

同时,我们还需要进行一些配置,来关闭生产提示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始Vue</title>
<!--    引入Vue-->
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>Hello World</h1>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false;  // 阻止 Vue 在启动时生成生产提示
</script>
</body>
</html>

我们总共进行了三件事情:

  1. 下载开发版本的 Vue
  2. 安装了 Vue 开发者调试工具
  3. 关闭生产提示

小案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始Vue</title>
<!--    引入Vue-->
    <script src="../js/vue.js"></script>
</head>
<!--
初始 Vue:
	1. 想让 Vue 工作,就必须创建一个 Vue 实例,且要传入一个配置对象;
	2. root 容器里的代码依然符合 HTML 代码,只不过混入了模板变量;
	3. root 容器里的代码被称为【Vue 模板】
-->
<body>
<div id="root">
    <h1>Hello , name</h1>  <!-- 使用插值语法插入 -->
    <p>name现在已经age岁了</p>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false;  // 阻止 Vue 在启动时生成生产提示
    // 创建 Vue 实例
    new Vue(
        el: "#root", // el 用于指定当前 Vue 实例为那个容器服务,值通常为 CSS 选择器字符串
        data: 
            name: "steve",
            age: 18
        ,  // data 用来存储数据,传入容器中,数据供 el 所指定的容器去使用,值暂时写成一个对象
    );

</script>

</body>
</html>

注意:

  1. 一个 Vue 实例不能解析多个容器,一个容器也不能对应多个 Vue 实例。Vue 实例和容器只能是一一对应的关系
  2. 模板标签里面必须写成 js 表达式
    • js 表达式:一个表达式会生成一个值,可以放在任何一个需要值得地方
    • js 代码:控制代码的走向,但是不会生成值
  3. 一旦 data 中的数据发生改变,那么模板中用到该数据的地方也会自动更新

二、 模板语法

模板语法有两大类:

  1. 插值语法
    • 功能:用于解析标签体内容
    • 写法:xxx,xxx 是 js 表达式,且可以直接读取到 data 中的所有属性
  2. 指令语法
    • 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件……)
    • 举例:v-bind:href=“xxx”,或者简写为 :href=“xxx”,xxx 同样需要写 js 表达式,且可以直接读取到 data 中的所有属性
    • 备注:Vue 中的很多指令,且形式都是:v-???,此处只是举一个例子
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>模板语法</title>
  <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
  <h1>模板语法</h1>
  <h3>hello, name</h3>
  <hr>
    
  <h1>指令语法</h1>
  <a v-bind:href="url.toUpperCase()">个人博客网站</a>
  <a :href="url">和上面那行的作用是一样的</a>
<!-- v-bind: ===> : (简写形式)-->
</div>

<script type="text/javascript">
  Vue.config.productionTip = false;
  new Vue(
    el: "#root",
    data: 
      name: "steve",
      url: "https://www.steve1.cn",
    
  )
</script>

</body>
</html>

三、 数据绑定

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

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

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

    注意:

    • 双向绑定一般都应用在表单类元素上
    • v-model:value 可以简写为 v-model ,因为 v-model 默认收集的就是 value 值
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>数据绑定</title>
  <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
  <h1>单向数据绑定</h1>
  <input type="text" :value="name">
  <h1>双向数据绑定</h1>
  <input type="text" v-model:value="name">
<!-- 当文本输入框的 value 修改时,data 中的 name 也会改变-->
<!-- 如下代码时错误的,因为 v-model 指令只能应用在表单类元素上-->
  <h2 v-model:x="name">Hello</h2>
</div>

<script type="text/javascript">
  Vue.config.productionTip = false;
  new Vue(
    el: "#root",
    data: 
      name: "steve",
    
  )
</script>

</body>
</html>

扩展:

  1. Vue 挂载容器的另外一种方式:

      const v = new Vue(
        // el: "#root",
        data: 
          name: "steve",
        
      )
      v.$mount("#root")
    
  2. data 使用函数式写法:

      const v = new Vue(
        /* data: 
          name: "steve",
         */
          data:function()   
              console.log(this)  // 此处的 this 是 Vue 实例对象
              return 
                  name: "steve",
              
           // 这里的 :function 是可以删除的,但是注意不能使用箭头函数,否则会出现 this 指针指向错误的问题
          data() 
              return 
                  name: "steve"
              
      	  
      )
      v.$mount("#root")
    

    注意,函数式写法中,函数必须要返回一个对象,推荐函数式使用。

由 Vue 管理的函数,一定不要使用箭头函数,否则 this 就不再是指向 Vue 实例对象了。

四、 MVVM 模型

  1. M(模型 Model):对应 data 中的数据
  2. V(视图 View):模板
  3. VM(视图模型 ViewModel):Vue 实例对象

实例:

五、 数据代理

1、 defineProperty

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据代理</title>
</head>
<body>
<!-- 回顾defineProperty  -->
<script type="text/javascript">
  let addr = "China"
  let person = 
    name: "steve",
    sex: 1,
  
  Object.defineProperty(person, "age", 
    value: 18,
    // enumerable: true,  // 控制属性是否可以枚举,默认值为false
    // writable: true,  // 控制属性是否可以被修改,默认值为false
    // configurable: true, // 控制属性是否可以被删除,默认值为false
  )  // 虽然麻烦,但是比较高级
  Object.defineProperty(person, "address", 
    // 当有人读取address 属性时,该函数会被调用
    get() 
      return addr
    ,
    // 当有人修改 person 的 address 属性时,set 函数就会被调用,且会收到修改的具体值
    set(value) 
      console.log(`有人修改了address属性,且值是$value`)
      addr = value
    
  )
  console.log(Object.keys(person))
  console.log(person)
</script>

</body>
</html>

2、 理解数据代理

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据代理的理解</title>
</head>
<body>
<!--数据代理:通过一个对象代理对另一个对象中属性的操作-->
<script type="text/javascript">
  
  let obj1 = x: 100
  let obj2 = y: 200
  Object.defineProperty(obj2, "x", 
    get() 
      return obj1.x
    ,
    set(value) 
      obj1.x = value
    
  )
</script>
</body>
</html>

3、 Vue中的数据代理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue中的数据代理</title>
  <script src="../js/vue.js"></script>
</head>
<body>
<!--  准备一个容器-->
<div id="root">
  <h2>学校名称:name</h2>
  <h2>学校地址:address</h2>
</div>
<script type="text/javascript">
  Vue.config.productionTip = false;
  const vm = new Vue(
    data: 
      name: "steve",
      address: "Anthony"
    
  )
  vm.$mount("#root")
</script>
</body>
</html>

六、 事件处理

1、 事件的基本使用

使用方法:

  1. 使用 v-on:xxx 或者@xxx绑定事件,其中xxx是事件名
  2. 事件的回调需要配置在 methods 对象中,最终会在 vm
  3. methods 中配置的函数,不要使用箭头函数;否则 this 的指向就不是 vm
  4. methods 中配置的函数,都是被 Vue 所管理的函数,this 的指向是 vm 或组件实例对象
  5. @click="demo"@click="demo($event)",效果一直,但是后者可以传参
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件的基本使用</title>
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>欢迎学习study_name</h1>
<!--    <button v-on:click="showInfo">点我提示信息</button>-->
    <button @click="showInfo"></button>  <!-- 这里的@即为v-on:的简写形式 -->
    <button @click="showInfo1(66, $event)"></button>  <!--注意,如果这个函数需要event事件的话,需要传入$event参数,位置随便在哪-->
    <a href="https://www.steve1.cn" @click.prevent="showInfo">.prevent是事件修饰符,其会阻止事件默认的行为</a>
</div>
<script type="text/javascript">
    Vue.config.productionTip  
1.1.1. 官网
英文官网
中文官网
 
1.1.2. 介绍与描述
Vue 是一套用来动态构建用户界面的渐进式JavaScript框架
构建用户界面:把数据通过某种办法变成用户界面
渐进式:Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库,复杂应用可以引入各式各样的Vue插件
作者:尤雨溪

 
1.1.3. Vue 的特点
1 遵循MVVM模式
2 编码简洁,体积小,运行效率高,适合移动/PC端开发
3 它本身只关注 UI,可以引入其它第三方库开发项目
4采用组件化模式,提高代码复用率、且让代码更好维护

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

使用虚拟DOM 和 Diff算法,尽量复用DOM节点

 
1.1.4.与其他 JS 框架的关联
借鉴 angular 的 模板 和 数据绑定 技术
借鉴 react 的 组件化 和 虚拟DOM 技术
 
1.1.5. Vue 周边库
vue-cli:vue 脚手架
vue-resource(axios):ajax 请求
vue-router:路由
vuex:状态管理(它是 vue 的插件但是没有用 vue-xxx 的命名规则)
vue-lazyload:图片懒加载
vue-scroller:页面滑动相关
mint-ui:基于 vue 的 UI 组件库(移动端)
element-ui:基于 vue 的 UI 组件库(PC 端)
 
1.2. 初识 Vue
前置工作
1给浏览器安装 Vue Devtools 插件
2标签引入Vue包
3(可选)阻止vue在启动时生成生产提示Vue.config.productionTip = false
4favicon 需要将页签图标放在项目根路径,重新打开就有了(shfit+F5 强制刷新)
初识Vue
1想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象
2root 容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法
3root 容器里的代码被称为Vue模板
4Vue 实例与容器是一一对应的
5真实开发中只有一个Vue实例,并且会配合着组件一起使用
6xxx中的 xxx 要写 js 表达式,且 xxx 可以自动读取到data中的所有属性
注意区分:js 表达式 和 js代码(语句)
a表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方
a a+b demo(1) x === y ? \'a\' : \'b\'
bjs代码(语句)
if() for()
7一旦data中的数据发生变化,那么模板中用到该数据的地方也会自动更新
 
 
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>初识Vue</title>

    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>

  </head>
  <body>

    <!-- 准备好一个容器 -->
    <div id="demo">
      <h1>Hello, name.toUpperCase() , address </h1>
    </div>

    <script type="text/javascript" >
      Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。

      // 创建Vue实例
      new Vue(
        el: \'#demo\',    // el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串
        data:              // data中用于存储数据,数据供el所指定的容器去使用,值暂时先写成一个对象
          name: \'cess\',
          address: \'成都\'
        
      )
    </script>
  </body>
</html>

 

 
 
 

 
代码 https://wekenw.gitee.io/vuenote/

以上是关于Vue 核心的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 和 MVVM 小细节

Vue.js 和 MVVM 小细节

Vue.js 和 MVVM

Vue vs React: Javascript 框架

Vue.js 和 MVVM 的小细节

vue核心语法(超详细)