Vue2 —— 学习(一)

目录

一、了解 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 中对应的属性

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序认证,备案,域名,证书,上线全流程

1.微信公众平台完成小程序认证和备案。 配置服务类目&#xff1a; 2.购买域名并完成域名实名认证和备案&#xff0c;公安备案。 3.购买https证书。 下载证书&#xff1a; 4.创建目录 mkdir -p /home/app/exam/ssl。上传证书到该目录下。 5.创建nginx配置文件: vim /usr/local…

09 Python进阶: JSON 数据解析、日期和时间

JSON 数据解析 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 Python3 中可以使用 json 模块来对 JSON 数据进行编解码&#xff0c;它包含了两个函数&#xff1a; json.dumps(): 对数据进行编码。 json.loads(): 对数据进行解码。 Python 编码为 JSON …

Hugging Face入门(一)

简介 本文主要内容&#xff1a; Hugging Face介绍环境搭建敲两个例子 Hugging Face介绍 Hugging Face 是一家法美合资公司&#xff0c;总部位于纽约市&#xff0c;成立于2016年。它由法国企业家Clment Delangue、Julien Chaumond和Thomas Wolf在纽约市创立&#xff0c;最初是…

精品丨PowerBI负载测试和容量规划

当选择Power BI作为业务报表平台时&#xff0c;如何判断许可证的选择是否符合业务需求&#xff0c;价格占了主导因素。 Power BI的定价是基于SKU和服务器内核决定的&#xff0c;但是很多IT的负责人都不确定自己公司业务具体需要多少。 不幸的是&#xff0c;Power BI的容量和预期…

HiveSQL如何生成连续日期剖析

HiveSQL如何生成连续日期剖析 情景假设&#xff1a; 有一结果表&#xff0c;表中有start_dt和end_dt两个字段&#xff0c;&#xff0c;想要根据开始和结束时间生成连续日期的多条数据&#xff0c;应该怎么做&#xff1f;直接上结果sql。&#xff08;为了便于演示和测试这里通过…

golang slice总结

目录 概述 一、什么是slice 二、slice的声明 三、slice的初始化、创建 make方式创建 创建一个包含指定长度的切片 创建一个指定长度和容量的切片 创建一个空切片 创建一个长度和容量都为 0 的切片 new方式创建 短声明初始化切片 通过一个数组来创建切片 声明一个 …

C++可变参数模板

可变参数模板 一个可变参数模板就是一个接受可变数目参数的模板函数或模板类。 可变数目的参数被称为参数包。 存在两种参数包&#xff1a; 模板参数类&#xff0c;表示零个或多个模板参数&#xff1b;函数参数包&#xff0c;表示零个或多个函数参数。 我们用一个省略号来…

雷弗流体创新技术装备与您与您相约2024第13届生物发酵展

参展企业介绍 保定雷弗流体科技有限公司于2010年1月成立。为创新型企业&#xff0c;荣获国家级高新技术企业、国家级专精特新小巨人企业、河北省单项冠军企业、组织部巨人计划创业团队等荣誉称号。 保定雷弗流体科技有限公司现有职工180人&#xff0c;其中工程技术人员53人。现…

GitHub入门与实践

ISBN: 978-7-115-39409-5 作者&#xff1a;【日】大塚弘记 译者&#xff1a;支鹏浩、刘斌 页数&#xff1a;255页 阅读时间&#xff1a;2023-08-05 推荐指数&#xff1a;★★★★★ 好久之前读完的了&#xff0c;一直没有写笔记。 这本入门Git的书籍还是非常推荐的&#xff0c;…

【服务器部署篇】Linux下安装Docker容器

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

X服务器远程连接问题解决:Bad displayname ““‘或Missing X server or $DISPLAY

X服务器远程连接问题 报错1 ImportError: this platform is not supported: (failed to acquire X connection: Bad displayname "", DisplayNameError()) Try one of the following resolutions: * Please make surethat you have an X server running, and that …

基于无线物联网的智能配电监控系统设计应用

摘要&#xff1a;阐述基于电力物联网的智能配电监控系统的特点&#xff0c;探讨物联网结构及其关键技术&#xff0c;电力物联网下的智能配电监控系统设计&#xff0c;包括整体结构设计、硬件和软件系统设计。 安科瑞薛瑶瑶18701709087 关键词&#xff1a;电力物联网&#xff…

AI水下颜色校正解决方案,助力企业打造水下视觉盛宴

水下摄影作为一种独特且富有挑战性的拍摄方式&#xff0c;正受到越来越多旅行者和摄影师的青睐。然而由于海水的光线折射和金属成分的影响&#xff0c;水下拍摄的照片和视频往往存在严重的偏色问题&#xff0c;无法真实还原水下世界的美丽与神奇。美摄科技凭借深厚的技术积累和…

【动态规划】【01背包】Leetcode 416. 分割等和子集

【动态规划】【01背包】Leetcode 416. 分割等和子集 ---------------&#x1f388;&#x1f388;416. 分割等和子集 题目链接&#x1f388;&#x1f388;------------------- 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0…

顺序表的应用之通讯录

学习了顺序表之后&#xff0c;我们也得知道它的实际用途吧&#xff01;所以&#xff0c;我们今天来学习一下通讯录的实现。 typedef struct personInfo SLDataType; contact.h #define NAME_MAX 20 #define GENDER_MAX 20 #define GTEL_MAX 20 #define ADDR_MAX 100 #include&…

芯课堂 | JScope虚拟示波器使用说明

​1. 首先需要安装Jlink的驱动&#xff0c;即安装JLink_Windows_V634e之后才能安装JScope&#xff0c;一般这个能正常使用Jlink下载、仿真说明你的Jlink驱动已经正常安装 2. 需要安装Jscope&#xff0c;即安装Setup_JScope_V611m&#xff0c;安装完成之后能看到以下画面 3. 新建…

ip地址电脑哪里看?一文揭秘

在数字化和网络化的今天&#xff0c;IP地址对于电脑用户而言具有至关重要的意义。无论是进行网络配置、故障排除还是安全管理&#xff0c;了解如何查看电脑的IP地址都是一项必备技能。虎观代理将深入解析IP地址的概念&#xff0c;详细指导用户如何在电脑上查看IP地址&#xff0…

红黑树插入机制深度剖析与实践指南

红黑树插入机制深度剖析与实践指南 一、红黑树的基本概念二、插入操作的初步2.1 RB-INSERT-FIXUP过程2.2 循环的不变性2.2.1 情况1&#xff1a;叔节点是红色2.2.2情况2和情况3&#xff1a;叔节点是黑色 三、插入操作的复杂性分析四、伪代码4.1 RB-INSERT 过程4.2 RB-INSERT-FIX…

angular—mooc课学习笔记

1.angular工程目录 2.设置标签元素样式 3.fex布局 4.事件绑定 5. 双向数据传输 6. 键盘实现方法

新生儿斜视:早期发现与关爱的重要性

引言&#xff1a; 新生儿斜视是一种常见的眼睛问题&#xff0c;如果不及时发现和治疗&#xff0c;可能会影响宝宝的视觉发展。因此&#xff0c;家长们需要重视并及时关注宝宝眼睛的情况&#xff0c;以便及早发现并处理斜视问题。在本文中&#xff0c;我们将探讨新生儿斜视的注意…