【day 01】初始vue

news2025/1/31 8:13:08

Vue的相关背景:

vue2 => vue3 ===>vue实战
vue
Taylor otwell (程序员中的网红)
框架 库 (功能 方法)axios
框架 生态 引入第三方功能库 社区
Vue2
Vue3
需要准备的小工具
vscode : snipper
Vetur
浏览器需要准备
Vue Devtools

     Vue 引入方式:
     1、cdn 引入
     2、 下载文件
     3、脚手架创建 (完整项目开发中用)
<!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>
</head>
<body>
   
     <div id="app">{{msg}} <br>
        名字:{{person.name}}<br>
        年龄:{{person.age}}<br>

     </div>
     <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
     <script>
    //    console.log(Vue);
    // 1.创建Vue的实例 {}配置对象
  
   
  Vue.config.productionTip = false;  
    const vm = new Vue({
        // 用于挂载到页面上的html标签
        // css选择器的写法  关联上dom容器 内容  叫模板
        el: '#app',
        // 用于存放 页面上要用到的数据
        data(){
            return {
                msg:'zz123456',
                person:{
                    name:'zz',
                    age:15
                },
            }
        },
    })
     console.log(vm);
   
    </script>
</body>
</html>

对上面的代码进行解析

 * 先解析 html #app
 * vue实例 el  ==》 #app挂载绑定 必不可少
 * 识别#app内有没有  vue语法  {{msg}}是vue语法  ==》‘我是zz’
 * 放在#app渲染页面中
 *   对比·:
 * 原生js 一步一步来
 * 声明变量  接收 页面上的dom
 * 声明变量  数据
 * dom.innerHTML = 数据
 * 数据发生了变化
 * dom.innerHTML = 新数据
 * 
 * el挂载的两种方式
 * 1 在配置对象中挂载到el属性
 * new Vue({
 * el :'#app'
 * })
 * 
 * 2 实例对象挂载
 * const vm = new Vue({
 * data :{
 *    msg:'zz456'
 * }
 * })
 * vm.$mount('#app')
 * 
 * data的两种写法
 * 1.
 * data:{
        数据写这里
 * }
 * 2 组件 内必须写这种写法
 * data: function(){
 *      return {
 *          数据
 *  }
 * }
 * 简写方式
 * data(){
 *    return {
 * 数据
 * }
 * }
 * 
 * 
 * 挂载时更多的情况
 * 1.没有被挂载的元素  不会被Vue解析
 * 2.body html 不能作为Vue的绑定的元素 会报错
 * 3.模板内使用实例中未 存在的数据 会报错
 * 4.如果对象中存在的是复杂对象 按照js语法拿出来就可以了
 * 
 * 
 * 了解一下
 * MVVM
 * M model 数据(数据层)  ====>data
 * V view  视图层  ===>   dom层  ===> Vue模板
 * VM viewModel vm  ===> Vue 实例
 * 
 * 1.model 数据层发生变化  通知vm vm通知view 进行渲染
 * 2. view 上发生了变化  (input 内的内容发生了变化)   通知vm vm通知model进行数据更新
 */
<!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>
</head>
<body>
    <div id='app'>
      <!-- {{1+2}}<br>
      {{msg}} -->
      <!-- ${msg} -->
      <span v-if="bool">我是一个加载中的图标</span>
      <span v-else>我是加载好的数据</span>
      <span v-if="num>80">优秀</span>
      <span v-else-if="num>=60&&num<= 80">一般</span>
      <span v-else>不及格</span>
      <template  v-if="bool">
        <span>1</span>
       <span >2</span>
       <span >3</span>
       <span >4</span>
       <span >5</span>
      </template>
    
    
      </div>
    
      <script src='https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js'></script>
      <script>
        Vue.config.productionTip = false
        new Vue({
          el: '#app',
          data() {
            return {
              msg:'z534',
              bool:false,
              num:89,
            }
          },
    </script>
    
</body>
</html>

对上面的代码进行解析

// 了解  修改插值语法写法{{}} ${}
    // delimiters:['${','}']
    })
    /**
     * 插值语法 标签内部使用 解析标签内容
     * {{xxx}}
     * 
     * xxx js的表达式(能生成一个结果)
     * a
     * 1+2
     * fn()
     * a>b ? 3:2
     * 
     * 不能放js语句
     * if for
     * 
     * 一、内容渲染指令
     * v-html
     * 将值解析成 dom结构  放到指定的使用指令的节点中
     * 覆盖节点中原本的 内容 (类似于 innerHTML)
     *   <div id='app' v-html="span">
         123
         </div>
   
         span: '<span>我是span</span>'

在这里插入图片描述
* v-text
不解析为dom结构 放到指定的使用指令的节点中
覆盖节点中原本的 内容(类似于 innerText)
* < div id=‘app’ v-Text=“span”>
123
</ div>
span: ‘我是span’
在这里插入图片描述

     *  二.条件渲染指令
       v-if
       <span v-if="bool">我是一个加载中的图标</span>
       bool:false false dom就不出现  true dom就渲染

       v-else 如果v-if 内的值为false v-else指令的dom就渲染
       如果v-if 内的值为true v-else指令的dom就不渲染

       注意:如果else和if要一起使用 之间不能有其他的干扰
             <span v-if="bool">我是一个加载中的图标</span>
             <span v-else>我是加载好的数据</span>
        
    v-else-if
         <span v-if="num>80">优秀</span>
  <span v-else-if="num>=60&&num<= 80">一般</span>
  <span v-else>不及格</span>

   多个节点  同一个判断条件
    <span v-if="bool">1</span>
   <span v-if="bool">2</span>
   <span v-if="bool">3</span>
   <span v-if="bool">4</span>
   <span v-if="bool">5</span>

   进一步改进
    <div  v-if="bool">
    <span>1</span>
   <span >2</span>
   <span >3</span>
   <span >4</span>
   <span >5</span>
    </div>
    再进一步改进 template 不会被渲染
<template  v-if="bool">
    <span>1</span>
   <span >2</span>
   <span >3</span>
   <span >4</span>
   <span >5</span>
  </template>

      */ 

内容渲染指令

条件渲染指令

v-if

条件性的渲染一块内容 判断为 true才会被渲染

v-else

两个分支 同一个判断语句

注意: 结构不能被打断

v-else-if

多个分支 不同的判断语句

应用: 加载中的图标 回到顶部 侧边栏

v-show

修改dom的display

v-if和v-show的区别

  v-if为false 元素直接不存在 什么都不做 
  v-show为false 只是不显示 元素是在的 存在于dom里面 

  如果你的dom 需要频繁切换状态 使用v-show
  只切换少次状态  使用v-if

  <p v-if="list.length">{{list}}</p>
  list: []

  setTimeout(() => {
      vm.list = ['你', '我']
    }, 1000)

v-once (了解)

解除动态的关联 只会渲染一次 (一次性的指令)

<span v-once="bool">我是小图标</span>
修改 bool值 视图不会发生改变 

属性绑定指令

v-bind

<img v-bind:src="imgSrc" alt=""> 
v-bind:属性='动态属性值' 属性值 识别为 Vue实例内的数据 {{}}

简写方式
<img :src="imgSrc" alt=""> 

v-bind 动态绑定class

第一种方式(字符串的写法)
//class类名 不确定 比如说是请求获取的类名 
<span class="box" v-bind:class="iconClass">我是span</span>
iconClass:'icon-font'
第二种方式(对象的写法)
<span class="box" :class="{iconClass:bool}">我是span</span>
    <!-- :class="{类名:判断条件}" -->

    bool为 true 具备iconClass这个类名 
    false 没有这个类名 

    <span class="box" :class="{iconClass:bool}">1</span>
    <br>
    <span class="box" :class="{iconClass:!bool}">2</span>
    <br>
    <button v-on:click="fn">修改bool</button>

    data() {
        return {
          bool: true
        }
      },
      methods: {
        //自定义的方法(函数)
        fn: function () {
          this.bool = !this.bool
        }
      },

第三种方式(数组的写法)
// 数组内 可以写字符串形式 也可以写对象形式 
<span class="box" :class="['icon-font','iconClass']">1</span>


<span class="box" :class="['icon-font',iconClass]">1</span>
iconClass:'iconClass',

配合写法
<span class="box" :class="[{'icon-font':!bool},{iconClass:bool}]">1</span>

<!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>
        .box{
            font-size: 25px;
            width:  10px;
            background-color:pink;
        }
        .icon-font{
            color: red;
        }
        .iconClass{
            background-color: aqua;
        }
    </style>
</head>
<body>
    <div id="app">
        <!-- <span v-once="bool">我是一个加载中的图标</span> -->
        <!-- <img v-bind:src="imgSrc" alt="">  -->
        <!-- <img :src="imgSrc" alt="" width="60px"> -->
     <!-- <span v-show="bool">我是一个加载中的图标</span>  -->
     <!-- <span v-if="bool">我是一个加载中的图标</span> -->
     <!-- <span v-show="list.length">{{list}}</span>  -->

      <!-- <span class="box" :class="iconClass">我是一个加载中的图标</span> -->
      <!-- <span class='box' :class="{iconClass:bool}">我是span</span><br> -->
      <!-- :class="{类名:判断条件}" 
     bool为 true  具备iconClass这个类名
     false 没有这个类名
    
      -->
      <!-- <span class="box"  :class="{iconClass:bool}">1</span><br> -->
      <!-- <span class="box"  :class="{iconClass:!bool}">2</span> -->
      <!-- 设置一个点击事件  来回切换 1  2 -->
      <!-- <button v-on:click="fn">修改bool的值</button> -->

<!-- 数组的写法 
   数组内  可以写字符串形式  也可以写对象形式
-->
      <!-- <span class="box" :class="['icon-font','iconClass']">1</span> -->
        <!-- <span class="box" :class="['icon-font',iconClass]">1</span> 
          iconClass:"iconClass"
        -->

        <!-- 配合写法 -->
        <!-- <span class="box" :class="[{'icon-font':!bool},{iconClass:bool}]">1</span> -->


        <!-- 方法一 -->
      <!-- <Span class="box" v-bind:style="{fontSize:size}">1</Span> -->
      <!-- 方法二 -->
      <!-- <Span class="box" v-bind:style="{fontSize:size+'px',opacity:num}">1</Span> -->
      <!-- 
        v-bind:style="{属性名:动态属性值}"
        属性名  两种写法  fontSize 'fontsize'
       -->
        <!-- <button v-on:click="fn1">字体增大,透明度减少</button> -->

              <!-- 方法二: 数组的方式-->
              <span class="box" v-bind:style="[handleWidth(),handleColor()]">123</span>

     </div>
     <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    
    <script>
    //   Vue.config.productionTip = false;
     const vm =    new Vue({
            el:'#app',
            data(){
                return{
                    bool :false,
                    // list:[],
                    // imgSrc:"1.jpg",
                    // 异步请求来的数据
                    // iconClass:'icon-font'
                    iconClass:"iconClass",
                    // size:'60px',
                    size:20,
                    num:1,
                    color:'red'
                }
            },
            methods: {
                // 自定义的方法(函数)
                fn: function(){
                    this.bool = !this.bool
                },
                fn1:function(){
                    this.size++;
                    this.num -=0.1
                },
                handleWidth(){
                    return {width: this.size +'px'}

                },
                handleColor:function(){
                    return {background: this.color}

            }
            },
        })

        // 模拟请求数据过程
        setTimeout(() =>{
            vm.list = ['nhao1','wshui']
        },1000)
    </script>
</body>
</html>

<!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>
        .box{
            background-color: aqua;
        }
    </style>
</head>
<body>
    <div id="app">
       <img v-bind="attr"/>

    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    //    Vue.cofig.productionTip = false;
       new Vue({
           el:"#app",
           data(){
               return{
                attr:{
                    src:'1.jpg',
                    class:{box:true},
                    width:200
                },
                   
               }
           }
       })
   </script>


</body>
</html>
总结
写法 v-bind:class='xxx' 简写 :class='xxx' xxx可以是字符串 可以是对象(用的较多) 可以是数组 

v-bind 动态绑定 style

某一个样式 有动态的变化 比如高度 透明度

第一种方式 对象写法 (常用)
<span class="box" v-bind:style="{属性名:动态属性值}">1</span>
<!-- 属性名  两种写法 fontSize 'font-size' -->

<span class="box" v-bind:style="{fontSize:size+'px'}">1</span>
<button v-on:click="fn">字体变大</button>
size: 60
methods: {
      //自定义的方法(函数)
      fn: function () {
        this.size++
      }
},
<span class="box" v-bind:style="{fontSize:size+'px',opacity:num}">1</span>
第二种方式 数组写法 (了解)
//将多个样式 应用到同一个元素上 
<span class="box" v-bind:style="[handleWidth(),handleColor()]">1</span>

    <span class="box" v-bind:style="[{ width: size + 'px' },{ backgroundColor: color }]">1</span>
data() {
        return {
          size: 60,
          color: 'red'
        }
      },

 handleWidth() {
          // 一通计算 width.....
          return { width: this.size + 'px' }
        },
        handleColor() {
          // 一通计算 color.....
          return { backgroundColor: this.color }
        }

多个属性同时绑定 (了解)

<img v-bind="attr">
 attr: {
          src: '01.jpg',
          class: { iconClass: true },
          width: 100
        },    

事件绑定指令

v-on 绑定事件的指令

监听 dom 点击 拖拽 滑入滑出 键盘事件

基础使用

<span>苹果</span>
    <button v-on:click="num--"> - </button>
    <span>{{num}}</span>
    <button v-on:click="num++"> + </button>

    <!-- <button v-on:事件名="事件处理逻辑"> + </button> -->

     <span>苹果</span>
    <button v-on:click="decrease"> - </button>
    <span>{{num}}</span>
    <button v-on:click="increase"> + </button>
    <!-- v-on:事件名="函数名" 函数不需要加括号 -->
    methods: {
        decrease() {
          this.num = Math.max(0, --this.num)
        },
        increase() {
          this.num++
        }
      },


 // 简写方式
 // @click ===> v-on:click  简写的时候 : 开头是属性绑定  @开头是事件绑定 
 //   <button @click="decrease"> - </button>

注意
1.函数作为事件函数是 使用不需要加括号
2.methods内的函数 内部的this指向 vm 要用data中的数据 this.数据名 
3.this指向问题 


changeNum() {
          console.log(this);//指向vm
          setTimeout(function () {
            console.log(this);//指向window
            this.num = 10086
          }, 1000)
        }
      
改成这样
changeNum() {
          console.log(this);//vm
          setTimeout(() => {
            console.log(this);//vm
            this.num = 10086
          }, 1000)
          
        }

methods内的函数内部 回调函数==> 温和无刺激的 箭头函数 要不然的话 this指向 window 

 changeNum: () => {
    console.log(this); //window
    this.num = 10086
  },

changeNum: function () {
  console.log(this);//vm
  this.num = 10086
},

被Vue管理的函数 methods里面的函数 使用普通函数 
不被Vue管理的函数 使用箭头函数 

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

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

相关文章

nvm版本控制工具安装及使用

一、nvm介绍 nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和n都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 二、nvm下载安装及使用 2.1 nvm下载 安装包…

【C++】容器篇(三)—— stack的基本介绍及其模拟实现

前言&#xff1a; 在之前的学习中我们已经了解了 vector 和 list &#xff0c;今天我将带领学习的是关于STL库中的 stack的学习&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;基本介绍 1、基本概念 2、容器适配器 &#xff08;二&#xff09;基本使…

Flutter 笔记 | Flutter 功能性组件

拦截返回键&#xff08;WillPopScope&#xff09; 为了避免用户误触返回按钮而导致 App 退出&#xff0c;在很多 App 中都拦截了用户点击返回键的按钮&#xff0c;然后进行一些防误触判断&#xff0c;比如当用户在某一个时间段内点击两次时&#xff0c;才会认为用户是要退出&a…

docker 服务环境搭建(mysql、rabbitmq、redis、nginx、springboot)

一般来说一个项目&#xff0c;百分之80都会用到以上这些&#xff0c;尤其是产品初期的demo 这些我都写过博客&#xff0c;但是我每次要去安装&#xff0c;都要去我不同的博客里面翻找&#xff0c;很烦&#xff0c;把他们聚在一起&#xff0c;方便我以后cv&#xff0c;就是这篇博…

注意力Transformer

注意力 注意力分为两步&#xff1a; 计算注意力分布 α \alpha α 其实就是&#xff0c;打分函数进行打分&#xff0c;然后softmax进行归一化 根据 α \alpha α来计算输入信息的加权平均&#xff08;软注意力&#xff09; 其选择的信息是所有输入向量在注意力下的分布 打…

基于中序有序的二叉搜索树

文章目录 什么是二叉搜索树二叉搜索树的中序遍历二叉搜索树的查找查找的非递归写法查找的递归写法 二叉搜索树的插入非递归递归 二叉搜索树的删除非递归递归 二叉搜索树的使用场景k模型kv模型 什么是二叉搜索树 二叉搜索树是普通二叉树的升级&#xff0c;普通二叉树除了存储数…

3、js - 垃圾回收机制

1、基础概念 &#xff08;1&#xff09;js内存的生命周期 -1- 内存分配&#xff1a;当声明变量、函数、对象时&#xff0c;系统会自动分配内存给它们 -2- 内存使用&#xff1a;即读写内存&#xff0c;也就是使用变量、函数 -3- 内存回收&#xff1a;使用完毕&#xff0c;由垃圾…

时间跟踪工具:Timemator Mac汉化版

Timemator是一款Mac平台上的时间跟踪工具&#xff0c;它可以帮助用户记录和分析日常工作和任务所花费的时间。Timemator提供了多种时间跟踪功能&#xff0c;包括自动跟踪应用程序和文档、手动添加时间记录、设置定时器等&#xff0c;让用户可以轻松记录和管理时间。 活动时间表…

互联网及SaaS行业如何落地体验管理?

3月25日&#xff0c;「体验家XMPlus」携手PMTalk成功举办了以“2023用户体验新趋势与数据增长实践”为主题的线下沙龙。 在本次活动中&#xff0c;有100多位来自不同企业的产品经理前来参与&#xff0c;大家聚集一起互相交流、分享经验。“体验家”的产品总监李若晨先生也进行了…

[RSA议题分析] Aikido Turning EDRs to malicious wipers using 0-day exploits

文章目录 简介议题分析wiperEDRWindows of Opportunity 总结 简介 本篇议题是由SafeBreach实验室的Or Yair带来的&#xff0c;主要通过利用EDR的删除恶意软件的能力和windows软连接与延迟删除文件的能力去制造一个可以在普通户权限下删除任意文件的恶意软件 - Aikido。这本质上…

科技云报道:汽车云,云计算换挡后的下一个“赛点”?

科技云报道原创。 从去年开始&#xff0c;汽车云似乎成为了云计算赛道的“香饽饽”。 尤其是在下半年&#xff0c;无论是阿里、腾讯、华为三大云巨头&#xff0c;还是百度云、京东云、字节云等奋力争夺“第四朵云”的玩家&#xff0c;均已各种形式“刷新”了其汽车云战略。玩…

Revit中窗族的立面出图设置和构件显隐

​  一、窗族的立面出图设置 Revit中&#xff0c;除了平面的出图设置以外还有立面的出图设置。 例如&#xff1a;如何在立面中&#xff0c;使窗户在精细详细程度显示的是窗的全部主体结构而在粗略/中等详细程度下是显示这样的样式呢? 在窗族样板中&#xff0c;打开立面&…

unity uitoolkit学习

使用UI Toolkit Debugger查看元素 1、打开面板 2、找到元素 在UI Builder窗体&#xff0c;别忘了打开Preview再选择元素 3、可以选择不同类型的窗体 4、查看元素的样式 需要注意的是下面的样式会覆盖上面的 5、调试 修改内置控件样式 1、找到PanelSettings>Theme St…

如果STM32/GD32一类的ARM单片机解除读写保护的方法

文章目录 前言一、打开软件二、连接到目标芯片1.连接2.若目标芯片无写包含3. 若存在读写保护 三、解除读写保护的操作&#xff1a;1. 打开Options Bytes对话框2. 操作步骤 四、工具下载链接 前言 有时候啊&#xff0c;使用ST-Link给STM32一类的ARM单片机下载程序的时候&#x…

Fastjson过滤器用法

fastjson git地址&#xff1a;https://github.com/alibaba/fastjson/wiki SimplePropertyPreFilter 用法 用于过滤某个属性 SimplePropertyPreFilter filter new SimplePropertyPreFilter();filter.getExcludes().add("gender");A a new A(1,"zhangsan"…

CSS样式的三种引入方式及优先级

说明&#xff1a;网页开发有三种技术&#xff0c;分别是html、css和js&#xff0c;分别对应页面的结构、表现和动作。css样式引入&#xff0c;是指把对页面的渲染作用到html上&#xff0c;有以下三种方式&#xff1a;行内式、内嵌式和外联式。 第一种&#xff1a;行内式&#…

噶了呀,现在的00后这么卷的吗?

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪20K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天&#xff0c;原来这位小老弟家里…

KDZD自动脱扣型绝缘靴(手套)耐压试验装置支架

一、概述 KDZD自动脱扣型绝缘靴&#xff08;手套&#xff09;耐压试验装置支架是根据《DLT 976-2017 带电作业工具、装置和设备预防性试验规程》、《DLT 1476-2015电力安全工器具预防性试验规程》、《GBT 17622-2008带电作业用绝缘手套》、《CB21148 2020足部防护 安全鞋》等相…

VBA学习-循环语句

目录 一、基础知识学习 二、单元格格式 三、循环语句与判断语句 一、基础知识学习 1、对单元格赋值 Sub 赋值()对单元格进行赋值Range("A1").Value 100End Sub 2、多区域赋值 Sub 多个区域赋值() 多区域赋值Range("B1:C2").Value 200 End Sub 3、不…

2023年10月自考本科如何报名,报考流程是怎样的?

自考本科报名条件&#xff1a; 自考本科没有条件与要求&#xff0c;国家规定&#xff1a;凡中华人民共和国公民&#xff0c;不受性别、年龄、民族、种族和已受教育程度的限制&#xff0c;均可参加自学考试。但是&#xff0c;需要注意的是&#xff0c;办理本科毕业证书者&#x…