day38(VueJS)概念 开发模式 框架的特点 启动步骤 指令 以及 小案例

概念

概念:Vue 是一套使用 Javascript 构建用户界面的渐进式框架。
Vue 框架涉及的内容有:Vue.js 开发概述、环境搭建、 Vue 指令、组件化应用构建、组件通信、组件嵌套、自定义指令、 自定义过滤器、组件属性、组件的路由、路由跳转。
注意:Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的浏览器。

MVVM开发模式

vuejs 是 MVVM 开发模式。MVVM 是 Model-View-ViewModel 的缩写。MVVM 是一种设计思想。Model 
层代表数据模型,也可以在 Model 中定义数据修改和操作的业务逻辑;View 代表 UI 组件,它负责将数据模型转化成 UI 展现出来,ViewModel 是一个同步 View 和 Model 的对象。
在 MVVM 架构下,View 和 Model 之间并没有直接的联系,而是通过 ViewModel 进行交互,Model 和 ViewModel 之间的交互是双向的, 因此 View 数据的变化会同步到 Model 中,而 Model 数据的变化也会立即反应到 View 上。

VueJS框架的特点

1. 组件化开发, 提高代码的复用率
2. 声明式编程, 以前是命令式编程, 不再操作复杂的 DOM3. 虚拟 DOM

创建并启动项目

1.步骤1) 创建 vue 项目指令:npm init vue@latest        创建项目(指定项目名称,选择插件)2) 下载项目依赖:npm i3) 启动项目:npm run dev
2.项目概要1) scr文件夹中包含:1> assets(放置图片资源,字体等静态文件)2> components(放置组件)3> App.vue(根组件/单文件组件)1>> template标签:组件模板,决定页面显示内容,包含且必须至少包含一个根元素/标签2>> style标签:组件样式3>> script标签:组件 js 逻辑2) main.js文件:入口文件

插值表达式

语法:<tag>{{变量/表达式}}</tag><template><div id="list"><div id="item" v-for="(item,index) in list" :key="index"><img :src="item.pic" alt=""><p>{{item.name}}</p>-------------------------插值表达式,使用双层花括号包裹住数据模型中的变量,用于标签内容区,也就是标签之间</div></div>
</template>

指令

1.列表渲染1)要点1> key 属性的作用key 属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes;如果不使用 key,vue 会使用一种最大限度减少动态元素并且尽可能尝试就地修改/复用相同类型元素的算法;而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除/销毁 key 不存在的元素。在进行插入或者重置顺序时,使用 key 属性可以让 diff 算法更高效,提高渲染效率--(重要点)2> 特点列表渲染又称循环渲染,v-for 指令放在哪个元素上, 就会根据数组的长度 n 最终出 n 个元素,包括内部的子元素, 形成一个列表, 通过 key 属性给渲染出来的每个列表元素绑定一个唯一索引, 避免 vue 的警告3> 注意1>> 该语法不能忘记加上 key="属性值",且 key 的属性值具有唯一性2>> v-for 语法遍历数组的元素必须在添加 v-for 的标签内部使用,在其外部使用则无法渲染4> 列表渲染/循环渲染语法<div v-for="(元素,下标) in 数组" v-bind:key="下标">5> 导入本地图片语法(本地图片需要从 assets 导入才能使用)import 名称 from '路径'data 必须是个函数, 必须返回一个{},data 中返回的数据是可以在组件模板 template 中使用的,其次拼写必须准确,否则无法加载data中定义的所有变量都是响应式数据, 只要在任何地方修改了响应式数据的值, 当前组件都会自动更新( 当前组件模板中的所有代码都会重新执行 )-------vue框架的核心思想: 数据驱动视图更新--(重要点)2)代码演示语法:<div v-for="(item,index) in 数组" v-bind:key="index">案例:<template><div class="list"><div class="item" v-for="(item,index) in arrlist" :key="index"><img :src="item.pic" alt=""><div class="name"> {{ item.name }} </div></div></div></template>导入本地图片:(本地图片需要从assets导入才能使用);语法:import 名称 from '路径'import pic from './assets/pic.png'export default {data(){----------------data必须是个函数, 必须返回一个{},data中返回的数据是可以在组件模板template中使用的,其次拼写必须准确,否则无法加载return {arrlist:[{ name:'嗨购超市',pic },{ name:'数码电器',pic },{ name:'嗨购服饰',pic },{ name:'嗨购生鲜',pic },{ name:'嗨购到家',pic },{ name:'充值缴费',pic },{ name:'9.9元购',pic },{ name:'领券',pic },{ name:'领金贴',pic },{ name:'plus会员',pic }]}}}</script>
2.属性绑定1)要点1> 语法<tag v-bind:属性名="变量类属性值"></tag>v-bind:可以简写成 :2> 使用场景当属性值为变量或需要运算的时候需要在属性名前面加上v-bind:或者:2)代码演示语法:v-bind:-------------可以简写成 :------当属性值为变量或需要运算的时候需要在属性名前面加上v-bind:或者:<template><div class="list"><div class="item" v-for="(item,index) in arrlist" :key="index"><img :src="item.pic" alt=""><div class="name"> {{ item.name }} </div></div></div></template>
3.条件渲染1)要点1> v-if条件渲染:控制标签的显示/隐藏( 是通过控制标签的插入与删除来实现标签的显示/隐藏 )2> v-show条件渲染:控制标签的显示/隐藏( 是通过控制标签添加以及去除display:none样式值来实现标签的显示/隐藏 )3> 语法:1>> v-if="条件表达式"v-else(v-else 指令不能直接添加给列表渲染的元素,因后期元素渲染成多个会造成歧义)2>> v-show="条件表达式"在元素需要频繁切换的场景下, 建议使用 v-show,它的性能好一些2)代码演示<template><div class="app"><h1> {{ num }} </h1>1.v-if 条件渲染(引号内条件成立则渲染该条语句的元素,不成立则渲染v-else的元素)<div v-if="arr.length == 0" class="empty">列表加载中...</div><div v-else class="box">2.v-show条件渲染(引号内条件成立则正常渲染元素,条件不成立则自动为该元素添加display:none属性,使之隐藏)<div v-show="arr.length == 0" class="empty">列表加载中...</div><div v-for="(item,index) in arr" v-bind:key="index">  --------当arr数组为空时,依照arr元素个数循环渲染的元素默认隐藏(在浏览器控制台看不到),不予渲染<div class="item"></div><span></span>{{ index + 1 }}  {{ item }}</div><h1> {{ obj.name }}  {{ obj.age }} </h1></div>	</template>
4.渲染到元素内容1)要点1> v-html 渲染到元素内容, 拥有 html解析2> v-text 渲染到元素内容, 没有 html解析,会直接把标签本身显示出来3> v-html效果类似于原生js的innerhtml,v-text的效果则类似于原生js的innertext2)代码演示<script>export default {data(){return {title:"今天开始学习<b>vuejs</b>",num:666,arr:[ ],obj:{ name:'张三',age:30 }}}}</script><template><div class="app"><h1> {{ title }} </h1>--------title在data()的赋值包含html标签,想要将html标签的效果展示出来,插值表达式是做不到的<div v-html="title"> </div>-------v-html可以将其属性值"title"的html标签的效果渲染出来,效果类似于原生js的innerhtml<div v-text="title"> </div>-------v-text也可以将属性值"title"渲染出来,但他没有html解析,会将标签本身显示出来,效果类似于原生js的innertext<h1> {{ num }} </h1></template>
5.双向数据绑定1)要点1> v-model 双向数据绑定指令, 当输入的内容发生改变,输入的内容会实时保存在对应的变量中2> v-model 双向数据绑定指令, 当对应的变量发生改变,改变后的内容会实时显示在输入框中3> 只有表单元素可以输入内容,故该指令只用于表单元素4> 语法:v-model="变量名"2)代码演示<script>export default {data(){return {phone:'',pass:'',check:false}},methods:{login(){console.log( this.phone, this.pass, this.check );if( !this.check ){  alert('请勾选协议!')}},}}</script><template><div class="app"><div class="line"><input v-model="phone" type="text" placeholder="输入手机号">---------通过v-model绑定input输入内容和组件实例中的变量,可以做到变量值实时同步给input输入框,或者input输入内容实时存储在变量中</div><div class="line"><input v-model="pass" type="text" placeholder="输入密码"></div><div class="line"><input type="checkbox" v-model="check"> 勾选协议---------v-model还可以绑定input复选框或者单选框是否被选中的状态属性,实时监测选项是否被选中,如果选中,check属性获取true值,反之获取false</div><button @click="login">登陆</button></div></template>
6.事件绑定1)要点注意:v-on:去掉on的事件类型 绑定点击事件 , 可以简写为 @去掉on的事件类型 ,也即用@可以代替v-on:语法:v-on:去掉on的事件类型="事件绑定函数名称"(如果需要传参,事件绑定函数名称后面需要带上括号)2)代码演示<script>export default {data(){return {phone:'',pass:'',check:false}},methods:{---------------------------定义方法(函数)   login(){----------------该写法等同于login:function(){}console.log( this.phone, this.pass, this.check );if( !this.check ){  alert('请勾选协议!')}}}}</script><template><div class="app"><div class="line"><input v-model="phone" type="text" placeholder="输入手机号"></div><div class="line"><input v-model="pass" type="text" placeholder="输入密码"></div><div class="line"><input type="checkbox" v-model="check"> 勾选协议</div><button @click="login">登陆</button>----------绑定函数,可以用@代替v-on:,这是函数绑定的简化写法</div></template>
7.this1)概念1> 含义:this表示 当前组件实例( 当前组件的对象 ),通过this关键字, 可以拿到当前组件实例身上的所有属性和方法2> 使用规则:1>> data中定义的数据在组件模板template中使用可以加this,也可以不加2>> data中定义的数据在组件js逻辑script中使用,必须加上this2)代码演示<script>export default {data(){return {phone:'',pass:'',check:false}},methods:{login(){console.log( this.phone, this.pass, this.check );--------script标签之间的this必须加上if( !this.check ){  alert('请勾选协议!')}},xxx(){}}}</script><template><div class="app"><div class="line"><input v-model="phone" type="text" placeholder="输入手机号">----------------template标签之间的属性可以不加this</div><div class="line"><input v-model="pass" type="text" placeholder="输入密码"></div><div class="line"><input type="checkbox" v-model="check"> 勾选协议</div><button @click="login">登陆</button></div></template>
7.案例1)事件高亮小案例思路:高亮的控制思路: 点击时保存当前点击的按钮下标(索引), 然后根据保存的按钮下标判断哪个按钮需要高亮代码逻辑:触发点击事件,将被点击元素的下标index通过形参i传入绑定函数,然后保存在设定的变量currentIndex中,相当于改变了currentIndex的值;而currentIndex属性是date中的响应式数据,该变量值的改变会使当前组件模板中的所有代码都会重新执行,也即更新,而在重新执行时,属性class中active值只有在下标index值与变量currentIndex相等的元素上才为true,也就是说只有数组中唯一的下标等于currentIndex的元素才有class="active"属性,而我们在组件样式中给定的专属于.btn.active元素的特殊高亮样式也会被渲染给具有class="active"属性的这个元素,也就实现了点击高亮的效果。<template><div class="tabbar"><div @click="handleClick(index)" v-for="(item,index) in btns" :key="index" :class="{btn:true , active: this.currentIndex == index }">-------------------当index的值等于currentIndex时,active的值为true<img :src="item.pic" alt=""><div class="name">{{item.name}}</div></div></div></template>2)分类切换高亮小案例<template><div class="box"><div class="list">渲染一级分类列表<div @click="handleClick(index)" v-for="(item,index) in list" :key="index" :class="{ cate:true, active: currentIndex == index  }">{{ item.name }}</div></div><div class="sublist">渲染二级分类列表<div class="cate" v-for="(item,index) in list[currentIndex].list" :key="index">------此处使用currentIndex响应式数据的值作为一级数组list的下标,索引对应的二级数组进行对应分支的渲染{{ item.name }}</div></div></div></template><script>vue框架的核心思想: 数据驱动视图更新 export default {data(){return {list:[{  name:'手机',list:[ { name:'苹果手机' },{ name:'小米手机' } ]},{  name:'家电',list:[ { name:'苹果家电' },{ name:'小米家电' } ]},{  name:'口红',list:[ { name:'苹果口红' },{ name:'小米口红' } ]},],currentIndex:0}},methods:{handleClick(i){this.currentIndex = i;-----------------------保存下标( 修改currentIndex这个响应式数据的值 )}}}</script><style>.box{display: flex;}.list .cate{line-height: 40px;padding: 0 15px;}.list .cate.active{background-color: #ccc;border-left: 2px solid red;}</style>

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

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

相关文章

unity 基于UGUI的无限动态滚动列表

基于UGUI的动态滚动列表&#xff0c;主要支持以下功能&#xff1a; 继承自UGUI的SrollRect&#xff0c;支持ScrollRect的所有功能&#xff1b; 使用对象池来管理列表元素&#xff0c;以实现列表元素的复用&#xff1b; 支持一行多个元素或一列多个元素&#xff1b; 可使用不…

ubuntu 22.04 jammy 手动安装 python 3.6

1 准备编译器 sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \ libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev \ libgdbm-dev libnss3-dev libedit-dev libc…

vue3 项目搭建教程整理

这里写目录标题 一、node二、npm三、搭建项目四、安装插件 一、node 查node版本&#xff1a;node –v 管理nodejs的版本 二、npm 查npm版本&#xff1a; npm –v1、安装指定版本&#xff08;6.14是具体的版本号&#xff09; npm install npm6.14 -g2、安装最新版本 npm ins…

【MyBatis Plus】深入探索 MyBatis Plus 的条件构造器,自定义 SQL语句,Service 接口的实现

文章目录 前言一、条件构造器1.1 什么是条件构造器1.2 QueryWrapper1.3 UpdateWrapper1.4 LambdaWrapper 二、自定义 SQL 语句2.1 自定义 SQL 的基本用法2.2 自定义 SQL 实现多表查询 三、Service 接口3.1 对 Service 接口的认识3.2 实现 Service 接口3.3 实现增删改查功能3.4 …

el-form那些事

vue3element-plus el-form那些事 输入框后拼接文字 输入框后拼接文字 <el-form-item :label"t(location.locationLength)" prop"locationLength"><el-input v-model"form.locationLength" :placeholder"t(location.inputLocation…

Windoes定时任务、设置定时重启系统

步骤一&#xff1a; 打开计算机管理 通过&#xff1a;control(控制面板&#xff09;或者compmgmt.msc(计算机管理&#xff09;打开程序 步骤二&#xff1a;打开——>系统工具 步骤三&#xff1a; 选择——>任务计划程序 步骤四&#xff1a; 可选择创建新文件命名&…

正点原子嵌入式linux驱动开发——Linux PWM驱动

PWM是很常用到功能&#xff0c;可以通过PWM来控制电机速度&#xff0c;也可以使用PWM来控制LCD的背光亮度。本章就来学习一下如何在Linux下进行PWM驱动开发。 PWM驱动解析 不在介绍PWM是什么了&#xff0c;直接进入使用。 给LCD的背光引脚输入一个PWM信号&#xff0c;这样就…

记一次企业微信的(CorpID)和密钥(Secret)泄漏的利用案例

文章目录 一、介绍二、利用过程1、获取AccessToken2、获取企业微信接口IP段3、获取企业微信回调IP段4、通过部门ID,查看返回的ID5、通过部门ID,查看用户列表6、通过便利ID,发现用户信息泄露,可以进行提交报告7、通过添加接口,添加企业账号8、登陆企业账号进行测试三、参考…

【随机过程】布朗运动

这里写目录标题 Brownian motion Brownian motion The brownian motion 1D and brownian motion 2D functions, written with the cumsum command and without for loops, are used to generate a one-dimensional and two-dimensional Brownian motion, respectively. 使用cu…

主动调度是如何发生的

计算机主要处理计算、网络、存储三个方面。计算主要是 CPU 和内存的合作&#xff1b;网络和存储则多是和外部设备的合作&#xff1b;在操作外部设备的时候&#xff0c;往往需要让出 CPU&#xff0c;就像上面两段代码一样&#xff0c;选择调用 schedule() 函数。 上下文切换主要…

【杂记】java 大集合进行拆分

日常中需要对一个大的集合进行拆分成多个小集合&#xff0c;其主要思路为&#xff1a; 设置需要拆分多少个小集合 A大集合里面有多少条数据 B计算出每个集合里面有多个条数据 CB/A计算出看是否存在余数 DB%A采用集合(List.subList())的方法对大集合进行拆分,循环A变进行集合拆…

Kafka - 3.x 图解Broker总体工作流程

文章目录 Zk中存储的kafka的信息Kafka Broker总体工作流程1. broker启动后向zk中注册2. Controller谁先启动注册&#xff0c;谁说了算3. 由选举出来的Controller监听brokers节点的变化4. Controller决定leader选举5. Controller将节点信息上传到Zk中6. 其他Controller从zk中同步…

Fourier分析导论——第1章——Fourier分析的起源(E.M. Stein R. Shakarchi)

第 1 章 Fourier分析的起源 (The Genesis of Fourier Analysis) Regarding the researches of dAlembert and Euler could one not add that if they knew this expansion, they made but a very imperfect use of it. They were both persuaded that an arbitrary and d…

jenkins配置gitlab凭据

下载Credentials Binding插件&#xff08;默认是已经安装了&#xff09; 在凭据配置里添加凭据类型 点击保存 Username with password&#xff1a; 用户名和密码 SSH Username with private 在凭据管理里面添加gitlab账号和密码 点击全局 点击添加凭据&#xff08;版本不同…

Go RESTful API 接口开发

文章目录 什么是 RESTful APIGo 流行 Web 框架-GinGo HelloWorldGin 路由和控制器Gin 处理请求参数生成 HTTP 请求响应Gin 的学习内容实战用 Gin 框架开发 RESTful APIOAuth 2.0接口了解用 Go 开发 OAuth2.0 接口示例 编程有一个准则——Don‘t Repeat Yourself&#xff08;不要…

如何在Windows和Linux系统上监听文件夹的变动?

文章目录 如何在Windows和Linux系统上监听文件夹的变动&#xff1f;读写文件文件系统的操作缓冲和流文件改变事件 如何在Windows和Linux系统上监听文件夹的变动&#xff1f; libuv库实现了监听整个文件夹的修改。本文详细介绍libuv库文件读写和监听的的实现方法。libuv库开发了…

Unity的碰撞检测(六)

温馨提示&#xff1a;本文基于前一篇“Unity的碰撞检测(五)”继续探讨两个游戏对象具备刚体的BodyType均为Dynamic&#xff0c;但是Collision Detection属性不同的碰撞检测&#xff0c;阅读本文则默认已阅读前文。 &#xff08;一&#xff09;测试说明 在基于两个游戏对象都具…

ClickHouse UDF 官方示例Example报错解决方案

目录 一、环境版本二、官方示例三、解决方案1.Python脚本运行缺少权限2. 缺少Python3运行环境 四、参考借鉴 一、环境版本 环境版本docker clickhouse22.3.10.22 docker pull clickhouse/clickhouse-server:22.3.10.22二、官方示例 官网文档 test_function使用 XML 配置创建…

element plus的icon使用及动态调用

在element plus中 icon图标不再能够通过类名直接使用&#xff1a; //element ui <i class"el-icon-plus"></i> element plus 的图标资源引入请直接访问官网 <el-icon><Present /></el-icon> 动态调用icon图表需要依靠vue的内置组…

使用 PointNet 进行3D点集(即点云)的分类

点云分类 介绍 无序3D点集(即点云)的分类、检测和分割是计算机视觉中的核心问题。此示例实现了开创性的点云深度学习论文PointNet(Qi 等人,2017)。 设置 如果使用 colab 首先安装 trimesh !pip install trimesh。 import os import glob import trimesh import numpy as…