Vue2 —— 学习(一)

news2024/11/26 9:33:21

目录

一、了解 Vue

(一)介绍

(二)Vue 特点

(三)Vue 网站

1.学习:

2.生态系统:

3.团队

二、搭建 Vue 开发环境

(一)安装与引入 Vue

1.直接引入

2.NPM 安装

(二)简单案例

小知识:

1.实现过程

容器设置

Vue 实例设置 

2.实现结果 

3.注意事项

(三)Vue 插件

​三、Vue 模板语法 

(一)插值语法 {{ }}:

(二)指令语法 v-

四、Vue 数据绑定  

(一)单向数据绑定:

(二)双向数据绑定: 

五、el 和 data 的两种写法

(一)查看实例

(二)el:

1.第一种写法:直接写

2.第一种写法:原型对象方法

(三)data:

1.第一种写法:对象式

2.第一种写法:函数式

六、 理解 MVVM 模型

(一)与 Vue 的联系

(二)两条流程:

(三)注意:

七、 Vue 数据代理 

(一)Object.defineproperty 方法

1.语法

2.实例

 (二)数据代理应用


一、了解 Vue

(一)介绍

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

构建用户界面:把手中的数据变成用户看见的界面

渐进式:自底向上逐层的应用,就是如果是简单的程序 只需要一个轻量小型的核心库;复杂应用需要引入各式各样的 Vue 插件。所以就是由小型的库逐步递进到复杂的库,看程序的复杂程度 逐层递进。

(二)Vue 特点

1.采用组件化 提高代码复用率 代码好维护

组件化:把网页中有特定功能的一部分(比如说任务栏)的html css js 文件封装到一个全新的文件类型 .vue 里面去,形成一个组件

复用率:如果有别人也想设计一个类似的任务栏就可以使用这个 .vue 文件提高复用率

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

比如 有一个对象里面有几个属性我们想挨个属性输出

我们用之前循环输出结果的那种语句叫命令式编码,必须一步一步进行

声明式相对很简洁

3.使用虚拟 DOM + 优秀的Diff 算法 尽量复用 DOM节点

就是 原生 DOM 如果在对象中又增加了一个属性,原本的三个数据就会被四个数据替换,然后再重新渲染到网页上,有点麻烦

 虚拟 DOM 又在数据和真实 DOM 之间增加了一个虚拟 DOM,它会缓存数据,如果对象中的数据发生了变化,有了这个就不是像之前一样又重新赋值一遍,虚拟 DOM 会将新数据 和原本的数据进行 Diff 比较 如果有之前的数据就保留,有新的变化就直接在原来的基础上改变数据,对过程进行了优化。

(三)Vue 网站

中文 Vue 官网  cn.vuejs.org

1.学习:

vuejs 中学习下面的教程 和 API 是最重要的两个部分,还有其它的

教程 :学习 Vue 缩进代表层级,红色感叹号表示注意项

API:Vue 的字典,不会的方法就查看 API

风格指南:就是代码风格 能合理优雅一点 尽量符合 Vue 代码风格

示例:把左边的栏往右拖一下 有源代码

Cookbook:技巧 进阶

2.生态系统:

工具和核心插件很重要,暂时用不到

3.团队

Awesome Vue 是作者推荐的一些好的 Vue 周边库,往下滑

浏览和 Vue 相关的包:和前一个差不多 好看一点

二、搭建 Vue 开发环境

(一)安装与引入 Vue

1.直接引入

使用<script>

开发版本:有详细的警告 vue.js,开发时使用,有利于改错

生产版本:删除了所有警告 vue.min.js (经过了压缩),产品上线前使用,缩小代码大小

我们下载开发版开发版引入,如下代码,全局多了一个 vue 函数

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

运行一下看一下控制台 有两个警告 引入成功 ,但是提示得安装 Vue 应用工具

在谷歌浏览器中 引入 Vue 应用插件 

然后插件中点击详情 然后允许访问 

然后刷新界面发现第一个警告消失

vue.config 是一个对象 包含 Vue 的全局配置 可以在应用启动之前 修改下列 property

API 全局变量里面 有属性介绍自己看看

  在 html 里面加一句  Vue.config.productionTip = false 能取消第二个警告

<script type="text/javascript">
    Vue.config.productionTip = false
  </script>
2.NPM 安装

需要配合脚手架 所以先学习前面的 script 引入访问文件地址

(二)简单案例

利用 Vue 的相关知识写一个可以变化文字内容 文字片段

小知识:

在 vscode 使用 Live Srever 插件,打开当前页面,会在本机5500 的端口开一台小服务器,把整个工程中的文件文件夹作为这台服务器中的根资源使用

1.实现过程
容器设置

root 容器中的代码被称为 Vue 模板

首先外面得有一个容器,然后创建 Vue 实例,传入配置对象

容器中首先有 插值语法就是和 Vue 相关的变化的量

{{用两个大括号里面放变化的变量}} 然后去 vue 中设置 变量具体的值

 <div id="root">
    <h1>hello {{name}}</h1>
  </div>
Vue 实例设置 

括号里面大括号一般是配置对象({ })

常见的参数:

el:指定当前Vue 实例为哪个容器服务 里面是 css 选择器字符串形式(.name/#name)

data:传入数据 最好是数组类型

new Vue({
      el: '#root',
      data: {
        name: '一个人'
      }
2.实现结果 

Vue 实例解析 容器 看是否有变化的值 (name),检查到具体插值语法,最后 root 容器中的内容被替换成 Vue 模板内容

<body>
  <div id="root">
    <h1>hello {{name}}</h1>
  </div>
  <script type="text/javascript">
    Vue.config.productionTip = false
    new Vue({
      el: '#root',
      data: {
        name: '一个人'
      }
    })
  </script>
</body>
3.注意事项

多个相同类名的容器 不能都被 Vue 实例操作,只控制第一个,同样多个实例对同一个容器操作也不行,容器、实例是一对一的。但是也不能一个实例里面太多内容 可以往下分发内容 就是我们要使用的组件

{{ }} 里面究竟能放什么内容: js 表达式 就是有具体的 返回值 的语句,有变化的值,改变 Vue 实例的 data 里面的的值 相应页面用到该值的地方也会发生改变

真实开发中只有一个 Vue 实例,和组件一块儿使用

(三)Vue 插件

使用我们导入的 Vue 插件 

观察组件结构 有点像 DOM 结构

<Root> 不是容器 它是根 就是我们的 Vue 实例 以后里面有 儿子 就是组件

可以改变下面 Root 的内容来测试

三、Vue 模板语法 

root 容器中的代码被称为 Vue 模板

(一)插值语法 {{ }}:

就是把指定的值放到指定的地方,插值常用于标签体内部,就是<>123<>里面的内容

<body>
  <div id="root">
    <h1>插值语法</h1>
    <h3>你好{{name}}</h3>
  </div>
  <script type="text/javascript">
    new Vue({
      el: '#root',
      data: {
        name: '一个人'
      }
    })
  </script>
</body>

(二)指令语法 v-

指令语法常用于 标签属性中 就是<123> 里面的属性

v 是使用 Vue 的意思

v-bind: 动态的绑定值 

v-bind 能简写为 : 只有 v-bind 后面写的还是 js 表达式 

v-bind:'url' 会把里面的 url 当成表达式使用 就是从 url 变成 url = ... 的形式就能把 Vue 实例中的 url 数据读出来了 不能用{{url}}

加上:就能执行后面的语句否则就是普通的字符串形式

<body>
  <div id="root">
    <h1>指令语法</h1>
    <a v-bind:href="url">一个链接</a>
  </div>
  <script type="text/javascript">
    new Vue({
      el: '#root',
      data: {
        name: '一个人',
        url:'http://www.baidu.com'
      }
    })
  </script>
</body>

如果 Vue实例中的属性名字冲突 可以设置多个层级,再用别的对象包括一下

四、Vue 数据绑定  

v-bind 就是一种数据绑定 href 的内容就是 url 的内容

(一)单向数据绑定:

v-bind:  或 :

文本框输入改变了 value 但是不改变 Vue 实例中 value 属性

就是改变 Vue 实例中的数据时,对应容器中用到该数据的地方也会相应发生变化,但是如果对容器中可变化的数据进行变化 Vue 实例中的数据不会发生变化,因此是单向的。

<body>
  <div id="root">
   单向数据绑定:<input type="text" :value="name">
  </div>
  <script type="text/javascript">
    new Vue({
      el: '#root',
      data: {
        name: '一个人'
      }
    })
  </script>
</body>

(二)双向数据绑定: 

v-model:只能用在 表单类型元素中 就是有 value 的标签

v-model:value 可以简写为 v-model

文本框输入改变了 value 也改变 Vue 实例中 value 属性

就是改变 Vue 实例中的数据时,对应容器中用到该数据的地方会相应发生变化,对容器中可变化的数据进行变化 Vue 实例中的数据也会发生变化,因此是双向的。

五、el 和 data 的两种写法

(一)查看实例

查看 Vue 实例对象 发现以 $ 开头的属性和方法 都是给我们程序员用的,在下面的截图中,不带的就不是给我们用的,是底层用的,我们先不用这些

我们现在用的方法在这里,在原型对象中 ,就是 js 高级中学的原型对象 实例都能看见原型对象中的方法 

(二)el:

1.第一种写法:直接写

直接写在配置对象里面,

特点:设置完立即和容器相连,容器内部立即变成 Vue 实例中的内容

 new Vue({
      el: '#root',
      data: {
        name: '一个人'
      }
    })
2.第一种写法:原型对象方法

利用原型对象中的方法  $mount('css中的标签名') mount 是挂载的意思

特点:可以随时和容器相连,可以设置延时几秒后再和容器相连然后 容器显示内容

  const v = new Vue({
      data: {
        name: '一个人'
      }
    })
    console.log(v)
    v.$mount('#root')

(三)data:

1.第一种写法:对象式

普通写法 不建议使用

 data: {
        name: '一个人'
      }
2.第一种写法:函数式

尽量用函数式,后面组件必须用函数式,对象式会报错

是 Vue实例对象调用这个函数 所以 this 指向 Vue 实例对象

注意函数不能用箭头函数写不然会让 this 指向外层的 window,因为箭头函数没有 this,this就层层外指

  data:function(){
        return{
          name: '一个人'
        }
      }

六、 理解 MVVM 模型

(一)与 Vue 的联系

Vue 作者参考 MVVM 模型设计出了 Vue 模型

M:模型 model 对应 data 中的数据

V:视图 view 对应 DOM 就是对应 Vue 中的模板

VM:视图模型 ViewModel 对应 Vue 的实例对象

(二)两条流程:

数据通过数据绑定 将数据显示到页面上

数据通过 DOM 监听页面事件观测页面中数据的变化从而 对 Vue 对象中的数据进行更改

(三)注意:

在文档中经常用 vm 这个变量名来 代表 Vue 实例

data 中的属性都出现在 vm 身上

vm 身上所有的属性 和 vm 原型上所有的属性都能在 Vue 模板中直接使用

七、 Vue 数据代理 

(一)Object.defineproperty 方法

给对象添加属性的方法 es6 中的新语法

1.语法

Object.defineproperty 有三个参数

第一参数 对象名

第二参数 添加的属性名

第三参数 配置项 里面能加很多配置

最常用 value 就是给属性名添加属性值

2.实例

下面给 person 添加了一个 sex 属性 值是男

但是在浏览器中查看对象中的属性 发现 新添加的 sex 属性颜色比其他的淡

这意味着它不可枚举,就是不能遍历

用Object.keys(person) 或 for(key in person)检测一下发现没有 sex 属性 

let person = {
      name: '张三',
      age: 18
    }
 Object.defineProperty(person, 'sex', {
      value: '男'
    })

可以通过添加一个 enumerable:true 来解除这种现象  默认是false

能添加的属性如下:

value:属性值

enumerable:true 属性能枚举

writable:true 属性就能修改了

configurable:true 属性可以删除

get(){

return 'hello'

} :当有人读取 person 中 sex 的值时 get 就会被调用 返回值就是 sex 的值,这整个函数也被称为getter,设置完这个函数 sex 属性后面的值就会变成省略号因为,它是随用随调用,不调用时不显示,调用就返回 return 的值 给 sex 属性

同理 set(value){

console.log('有人修改sex 值 值是value')

number = value

}检测是否有人修改 value 值 整个函数也叫 setter 值

前四种属性设置:

  Object.defineProperty(person, 'sex', {
      value: '男',
      enumerable: true,
      writable: true,
      configurable:true
    })

 get 方法设置:

 <script type="text/javascript">
    let person = {
      name: '张三',
      age: 18
    }
    let number = 13
    Object.defineProperty(person, 'sex', {
      get() {
        return number
      }
    })
    console.log(person)
  </script>

set 方法设置: 

 Object.defineProperty(person, 'sex', {
      get: function () {
        return number
      },
      set(value) {
        number = value
      }
    })

 (二)数据代理应用

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

下面可以通过 obj1.x = 300 来改变 obj 中 x 的值也变成 300

  Object.defineProperty(obj1, 'x', {
      get() {
        return obj.x
      },
      set(value) {
        obj.x = value
      }
    })

我们检测一下 vm 中的属性发现里面多了两个属性一个是 name address 我们发现浏览器中查看这两个属性他们后面的值是省略号 这证明 他们使用了数据代理,通过调用我们设置的data.name 和

data.address 来查看和修改 name address 的值,分别利用了getter 和 setter 方法

<body>
  <div id="root">
    <h1>学校名称:{{name}}</h1>
    <h1>学校地址:{{address}}</h1>
  </div>
  <script type="text/javascript">
  const vm = new Vue({
    el:'#root',
    data:{
      name: '普通学校',
      address: '地上'
    }
   })
  </script>
</body>

查看 vm 对象

初始我们定义的 data 和 _data 是一个东西,我们改变 vm 中 name address 属性的值 data.name data.address 的值也会变化. 但是我们查看不到 代码只是最开始的代码

_data.name 和 name 本质是一个东西 但是有了数据代理 我们能简化代码写个 name 就行

原理;通过Object.defineProperty() 把 data 对象中所有属性添加到 vm 上

为每一个添加到 vm 的属性添加一个 getter 和 setter

在 getter setter 内部去操作data 中对应的属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Burp练兵场之通过加密语言机绕过身份验证(思路鉴赏)

前言 之前有一段时间在玩Burp的靶场&#xff0c;感觉还不错&#xff0c;总体排名也冲到了top30 靶场地址 → https://portswigger.net/web-security/logic-flaws/examples/lab-logic-flaws-authentication-bypass-via-encryption-oracle 通过加密预言机绕过身份验证 靶场信息…

如何理解WMS仓储管理系统的建设理念

在现代企业经营中&#xff0c;WMS仓储管理系统的建设已成为提升竞争力的关键所在。随着科技的不断发展&#xff0c;越来越多的企业开始寻求实现高度自动化、信息化和网络化的生产模式。WMS仓储管理系统则成为实现这一目标的重要工具。本文将深入探讨WMS仓储管理系统解决方案的建…

关于Emulator和Simulator的探讨

由于写论文需要&#xff0c;仔细的学习和比对一下Emulator和Simulator的概念。原来“Emulator专门指硬件模拟&#xff0c;Simulator专门指软件模拟”的观点是不正确的&#xff0c;于是查看了很多文章的解释。同时也提醒自己&#xff0c;做科研一定要认真细致&#xff0c;无论看…

引领教育变革:山海鲸可视化智慧教育方案

随着信息技术的迅猛发展&#xff0c;教育领域正迎来一场深刻的变革。山海鲸可视化智慧教育解决方案&#xff0c;以其创新的技术和丰富的应用场景&#xff0c;正成为推动教育现代化进程的重要力量。 山海鲸可视化智慧教育解决方案是一套集教学、管理、服务于一体的综合性教育系…

C#:用定时器监控定时器,实现中止定时器正在执行的任务,并重启

Windows服务中使用的比较多的是定时器&#xff0c;但这种定时任务有个比较大的毛病&#xff1a;有时会莫名其妙地停止执行&#xff08;长时间执行不完&#xff0c;假死&#xff09;&#xff0c;必须得手工重启Windows服务才能恢复正常。这个就太麻烦了。 有没有办法来实现定时…

DataX,MongoDB数据导入hdfs与mysql

【尚硅谷】Alibaba开源数据同步工具DataX技术教程【尚硅谷】Alibaba开源数据同步工具DataX技术教程_哔哩哔哩_bilibili 目录 1、MongoDB 1.1、MongoDB介绍 1.2、MongoDB基本概念解析 1.3、MongoDB中的数据存储结构 1.4、MongoDB启动服务 1.5、MongoDB小案例 2、DataX导入…

vmware 一打开虚拟机就蓝屏重启

按照正常步骤安装完镜像后&#xff0c;点击 开启此虚拟机 &#xff0c;直接出现下图所示蓝屏&#xff0c;然后重启。 解决的办法是通过修改 启用或关闭windows功能 里的选项&#xff0c;如下图&#xff0c;勾选上 Windows虚拟机监控程序平台 和 虚拟机平台 两项。然后重启电脑…

C语言之自定义类型联合和枚举

目录 前言 一&#xff1a;联合体&#xff08;共用体&#xff09;union 1.联合体类型的声明 2.联合体的特点 3.联合体大小的计算 4.联合体判断机器的大小端 二&#xff1a;枚举enum 1.概念 2.枚举的优点 3.枚举的使用 接下来的日子会顺顺利利&#xff0c;万事胜意…

[paper note]LoRA+: 原理分析

论文信息 论文标题&#xff1a;LoRA: Efficient Low Rank Adaptation of Large Models 发表时间&#xff1a;2024年2月 论文内容 摘要 在本文中&#xff0c;我们表明&#xff0c;最初在论文《LoRA: Low-Rank Adaptation of Large Language Models》中引入的低秩适应&#…

人工智能应用工程师特训营丨国家认证,行业必备

人工智能应用工程特训营 提升目标&#xff1a; 1、提高专业认可度&#xff0c;增强职场竞争力 2、实战项目驱动&#xff0c;提升应用能力 3、技术体系全面&#xff0c;涵盖多个领域 4、实时在线答疑&#xff0c;强化学习互动 特训营学习流程&#xff1a; 职业技术证书&#xff…

WinRAR功能之【锁定压缩文件】

今天来分享一下WinRAR解压缩软件的“锁定压缩文件”功能&#xff0c;这个功能可以保护压缩包里文件的完整性&#xff0c;也就是不能随意增加、删除以及修改压缩包里的文件。我们可以用两种方式来设置&#xff0c;一起来看看吧&#xff01; 方式1&#xff1a;在压缩文件的时候&a…

Matlab进阶绘图第49期—气泡堆叠图

气泡堆叠图是堆叠图与气泡图的组合—在堆叠图每根柱子上方添加大小不同的气泡&#xff0c;用于表示另外一个数据变量&#xff08;如每根柱子各组分的平均值&#xff09;的大小。 本文利用自己制作的BarBubble工具&#xff0c;进行气泡堆叠图的绘制&#xff0c;先来看一下成品效…

牛客 2024春招冲刺题单 ONT82 腐烂的苹果【中等 BFS Java,Go】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/54ab9865ce7a45968b126d6968a77f34 思路 广度优先搜索。首先找到2坐标集合&#xff0c;然后每次往四周为1的坐标扩展参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数…

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换

Unity 世界坐标、屏幕坐标、UGUI 坐标 相互转换坐标转换是游戏开发过程中必不可少的环节 看下图 世界坐标、屏幕坐标、UI 坐标 三种坐标系的转换过程&#xff0c;此文章中的 UI 坐标特指 UGUI 坐标 从上图可以看到&#xff0c;世界坐标 和 UI 坐标 需要通过 屏幕坐标作为中间转…

从“危”到“机”:HubSpot如何助企业转化出海营销CRM风险?

在全球化的大背景下&#xff0c;越来越多的企业选择出海拓展业务&#xff0c;以寻求更大的发展空间。然而&#xff0c;随着市场的扩大&#xff0c;企业在出海营销过程中也面临着各种风险。为了有效规避这些风险&#xff0c;许多企业选择借助HubSpot这样的专业营销软件。今天运营…

A Study of Network Forensic Investgation in Docker Environments文章翻译

A Study of Network Forensic Investgation in Docker Environments Docker环境下的网络取证研究 摘要 网络罪犯利用越来越多的技术(如虚拟机或基于容器的基础设施)进行恶意活动。 这些虚拟环境的固有动态简化了恶意服务的快速创建,并隐藏了所涉及的系统,这是以前没有的技…

C语言面试题之化栈为队

化栈为队 实例要求 C语言实现实现一个MyQueue类&#xff0c;该类用两个栈来实现一个队列&#xff1b;示例&#xff1a; MyQueue queue new MyQueue();queue.push(1); queue.push(2); queue.peek(); // 返回 1 queue.pop(); // 返回 1 queue.empty(); // 返回 false说明&…

关于51单片机TMOD定时器的安全配置

定时器介绍&#xff1a; -------------------------------------------------------------------------------------------------------------------------- 首先配置的是控制寄存器 TCON 说直白点&#xff0c;这个寄存器就是用来计数的&#xff0c;打开计时器&#xff0c;关…

UEditor 任意文件上传漏洞

前言 前段时间在做某政府单位的项目的时候发现存在该漏洞&#xff0c;虽然是一个老洞&#xff0c;但这也是容易被忽视&#xff0c;且能快速拿到shell的漏洞&#xff0c;在利用方式上有一些不一样的心得&#xff0c;希望能帮助到一些还不太了解的小伙伴&#xff0c;故此写了此篇…

AI爆款文案 巧用AI大模型让文案变现插上翅膀

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…