vue day1(主要是指令)

news/2024/7/23 19:29:32 标签: vue.js, javascript, 前端

1、引包在这里插入图片描述
或者:cdn网址
在这里插入图片描述
2、创建实例,初始化渲染
请添加图片描述
3、插值表达式 {{}}
表达式:可以被求值的代码
请添加图片描述
请添加图片描述
4、响应式数据:数据发生变化,视图自动更新(底层是dom操作)
data中数据会被添加到实例上,用实例.属性名访问
vue核心特性:响应式

5、安装vue开发工具:调试

edge:在这里插入图片描述
chrome上同理

6、vue指令:带有v-前缀的特殊标签属性

(1)

插值表达式不具备解析标签的能力,直接将属性值原封不动显示到页面上请添加图片描述
请添加图片描述
(2)v-show和v-if:控制网页元素显示和隐藏
请添加图片描述
隐藏逻辑不一样,v-if直接没有这个标签了(创建和移除元素(条件渲染)),而v-show切换display:none来实现
不断创建和删除节点开销较大,故频繁切换显示隐藏用v-show

而只显示一次的,用v-show,其实元素还在页面中,导致页面结构冗余

(3)请添加图片描述
(4)v-on
注册事件=添加监听+提供处理逻辑
1、v-on:事件名=“内联语句”
vue中 数据是响应式的,一旦数据修改,视图自动更新

v-on:事件名可简写为@事件名

2、v-on:事件名=“methods中的函数名”
如何访问修改data中数据? 实例.属性名

可维护性不好,实例名改变,methods中也要相应变化请添加图片描述
methods中this指向vue实例,可通过this访问data中变量(eg.this.isShow)

传参请添加图片描述
(5)v-bind
插值表达式不能在标签属性中使用

v-bind:属性名=“表达式”
简写:省略v-bind

(6)v-for:把某个标签根据某个数组值(或其他)多次渲染(使用时要加上v-key)
请添加图片描述
index可省略,item in list

案例::key=“item.id”
请添加图片描述
v-for中的key:给列表项添加的唯一标识,便于vue进行列表项 正确排序复用。

(7)v-model请添加图片描述
请添加图片描述
示例:
请添加图片描述
(8)案例
v-for中通常用id作为key(唯一性)

解决一个bug:用户输入空白,点击添加任务会添加一个空任务。
加个判断,此处用上trim方法可以得到过滤掉左右两边空白字符的新字符串(用户可能输了几个空格才输入内容)
在这里插入图片描述
优化:如果没有任务,底部footer隐藏(属于非一次显示隐藏,用v-show)

标签中要访问v-for中item和index,也用插值表达式
在这里插入图片描述
删除的哪个li,id标示,要把id传给函数进行处理
在这里插入图片描述
自己写的:

javascript"><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    // id #调用
    const app = new Vue({
      el: '#app',
      data: {
        // 和表单元素双向绑定 空字符串(初始)
        todoName: '',
        list: [
          { id: 1, name: '跑步一公里' },
          { id: 2, name: '跳绳200个' },
          { id: 3, name: '游泳100米' },
        ],

      },
      methods: {
        del(id) {
          this.list = this.list.filter(item => item.id !== id)
        },
        add() {
          this.list.unshift({
            //id是独一无二的
            id: +new Date(),
            name: this.todoName
          })
        },
        clear() {
          this.list = []
        }
      }
    })

  </script>

原本的:

javascript"><!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" />
<link rel="stylesheet" href="./css/index.css" />
<title>记事本</title>
</head>
<body>

<!-- 主体区域 -->
<section id="app">
  <!-- 输入框 -->
  <header class="header">
    <h1>小黑记事本</h1>
    <input v-model="todoName"  placeholder="请输入任务" class="new-todo" />
    <button @click="add" class="add">添加任务</button>
  </header>
  <!-- 列表区域 -->
  <section class="main">
    <ul class="todo-list">
      <li class="todo" v-for="(item, index) in list" :key="item.id">
        <div class="view">
          <span class="index">{{ index + 1 }}.</span> <label>{{ item.name }}</label>
          <button @click="del(item.id)" class="destroy"></button>
        </div>
      </li>
    </ul>
  </section>
  <!-- 统计和清空 → 如果没有任务了,底部隐藏掉 → v-show -->
  <footer class="footer" v-show="list.length > 0">
    <!-- 统计 -->
    <span class="todo-count">合 计:<strong> {{ list.length }} </strong></span>
    <!-- 清空 -->
    <button @click="clear" class="clear-completed">
      清空任务
    </button>
  </footer>
</section>

<!-- 底部 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  // 添加功能
  // 1. 通过 v-model 绑定 输入框 → 实时获取表单元素的内容
  // 2. 点击按钮,进行新增,往数组最前面加 unshift
  const app = new Vue({
    el: '#app',
    data: {
      todoName: '',
      list: [
        { id: 1, name: '跑步一公里' },
        { id: 2, name: '跳绳200个' },
        { id: 3, name: '游泳100米' },
      ]
    },
    methods: {
      del (id) {
        // console.log(id) => filter 保留所有不等于该 id 的项
        this.list = this.list.filter(item => item.id !== id)
      },
      add () {
        if (this.todoName.trim() === '') {
          alert('请输入任务名称')
          return
        }
        this.list.unshift({
          id: +new Date(),
          name: this.todoName
        })
        this.todoName = ''
      },
      clear () {
        this.list = []
      }
    }
  })

</script>
</body>
</html>

http://www.niftyadmin.cn/n/5181104.html

相关文章

一款提高测试、验证和开发效率的测试管理工具SolarManager

随着电动汽车市场的蓬勃发展&#xff0c;电动汽车在测试过程中使用到的测试工具各式各样。另外&#xff0c;OEM的测试人员的分布地点广泛&#xff0c;同一套测试工具的测试潜力没有得到有效释放&#xff0c;往往需要在不同的工作地点购置同样的测试工具。 怿星科技在汽车测试领…

【多线程 - 06、线程优先级与线程让步 yield】

改变线程优先级 每个线程在执行时都具有一定的优先级&#xff0c;优先级高的线程获得较多的执行机会&#xff0c;而优先级低的线程则获得较少的执行机会。 每个线程默认的优先级都与创建它的父线程的优先级相同&#xff0c;在默认情况下&#xff0c;main线程具有普通优先级&…

C++算法:全 O(1) 的数据结构

题目 请你设计一个用于存储字符串计数的数据结构&#xff0c;并能够返回计数最小和最大的字符串。 实现 AllOne 类&#xff1a; AllOne() 初始化数据结构的对象。 inc(String key) 字符串 key 的计数增加 1 。如果数据结构中尚不存在 key &#xff0c;那么插入计数为 1 的 key…

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

老卫带你学---深入理解Golang之context

深入理解Golang之context 为什么需要context 在并发程序中&#xff0c;由于超时、取消操作或者一些异常情况&#xff0c;往往需要进行抢占操作或者中断后续操作。熟悉channel的朋友应该都见过使用done channel来处理此类问题。比如以下这个例子&#xff1a; func main() {mes…

STM32F429主控TB6612驱动直流电机----解决PWM波形未输出bug

在使用定时器&#xff08;TIM&#xff09;进行脉冲宽度调制&#xff08;PWM&#xff09;时&#xff0c;除了使能定时器本身&#xff08;通过TIM_Cmd(TIM2, ENABLE)&#xff09;外&#xff0c;还需要使用TIM_CtrlPWMOutputs(TIM2,ENABLE)函数来启用PWM输出。TIM_Cmd(TIM2, ENABL…

深入学习 Android Framework 之 SystemServer 进程启动详解

深入学习 Android Framework 第三&#xff1a;深入学习 Android Framework 之 SystemServer 进程启动详解 文章目录 深入学习 Android Framework前言一、Android 系统的启动流程1. 流程图2. 启动流程概述 二、源码详解1. 时序图2. 源代码1、ZygoteInit # main()2、ZygoteInit …

edge/chrome浏览器favicon.ico缓存问题

解决办法来源于How do I force a favicon refresh? - Stack Overflow <head><link rel"icon" href"favcion.ico" type"image/x-icon"></link> </head> 遇到的问题&#xff1a; 第一次设置了faccion.ico 后 再一次修…