IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue(1) -> 正文阅读

[JavaScript知识库]Vue(1)

1. vue 简介

?1.1 什么是 vue 官方给出的概念:

Vue (读音 /vju?/,类似于 view) 是一套用于构建用户界面的前端框架。

1.2 vue 的特性

vue 框架的特性,主要体现在如下两方面:

1. 数据驱动视图:

在使用了 vue 的页面中,vue 会监听数据的变化,从而自动重新渲染页面的结构。示意图如下:

(1) 好处:当页面数据发生变化时,页面会自动重新渲染!

(2) 注意:数据驱动视图是单向的数据绑定

?2. 双向数据绑定:

在网页中,form 表单负责采集数据,Ajax 负责提交数据。

?(1) js 数据的变化,会被自动渲染到页面上

?(2) 页面上表单采集的数据发生变化的时候,会被 vue 自动获取到,并更新到 js 数据中

注意:数据驱动视图和双向数据绑定的底层原理是 MVVM(Mode 数据源、View 视图、ViewModel 就是 vue 的实例)

2. vue 的基本使用

2.1. 基本使用步骤

① 导入 vue.js 的 script 脚本文件

② 在页面中声明一个将要被 vue 所控制的 DOM 区域

③ 创建 vm 实例对象(vue 实例对象)

2.2 基本代码与 MVVM 的对应关系?

?vue 的调试工具:? vue-devtools 调试工具

?3. 事件修饰符

在事件处理函数中调用 event.preventDefault() event.stopPropagation() 是非常常见的需求。因此, vue 提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制。常用的 5 个事件修饰符如下:

3.1??.prevent 阻止默认事件

<body>
    <div id="app">
      <!-- 事件修饰符 -->
      <!-- .prevent 阻止默认事件 -->
      <a href="http://www.baidu.com" @click.prevent="show">跳转到百度首页</a>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {},
      methods: {
        show(e) {
          // js 原生方法
          // e.preventDefault();
          console.log("点击了 a 链接");
        },
      },
    });
  </script>

3.2? .stop 阻止冒泡

  <style>
      .block {
        width: 200px;
        height: 200px;
        background-color: pink;
      }
    </style>
  <body>
    <!-- 事件修饰符 -->
    <!-- .stop 阻止冒泡 -->
    <div id="app">
      <div class="block" @click="outClick">
        <button @click.stop="btn">按钮</button>
      </div>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        // 冒泡事件,由内而外
        btn(e) {
          // js 原生方法
          // e.stopPropagation();
          console.log("按钮冒泡");
        },
        outClick() {
          console.log("外部冒泡");
        },
      },
    });
  </script>

3.3? ?.capture 捕获事件

<body>
    <!-- 事件修饰符 -->
    <!-- .capture 添加事件侦听器时使用事件捕获模式 -->
    <!-- 事件冒泡、事件捕获只能2选1 -->
    <!-- 事件捕获,由外而内 -->
    <!-- 英文单词:截屏 -->
    <div id="app">
      <div
        style="
          height: 200px;
          width: 200px;
          background-color: aqua;
          padding-left: 80px;
          line-height: 200px;
        "
        @click.capture="outClick"
      >
        <button @click="btn">按钮</button>
      </div>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        btn() {
          console.log("按钮冒泡");
        },
        outClick() {
          console.log("外部冒泡");
        },
      },
    });
  </script>

3.4 .self

  <body>
    <!-- 事件修饰符 -->
    <!-- .self 当事件在该元素本身(比如不是子元素)触发时触发回调 -->
    <div id="app">
      <div
        style="
          height: 200px;
          width: 200px;
          background-color: aqua;
          padding-left: 80px;
          line-height: 200px;
        "
        @click.self="outClick"
      >
        <button @click="btn">按钮</button>
      </div>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        btn() {
          console.log("按钮冒泡");
        },
        outClick() {
          console.log("外部冒泡");
        },
      },
    });
  </script>

3.5 .once

 <body>
    <!-- 事件修饰符 -->
    <!-- .once 事件只触发一次 -->
    <div id="app">
      <div
        style="
          height: 200px;
          width: 200px;
          background-color: aqua;
          padding-left: 80px;
          line-height: 200px;
        "
        @click.capture="outClick"
      >
        <button @click.once="btn">按钮</button>
      </div>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        btn() {
          console.log("按钮冒泡");
        },
        outClick() {
          console.log("外部冒泡");
        },
      },
    });
  </script>

?3.6? 事件修饰符-self和stop的区别

<style>
      #outer {
        width: 400px;
        height: 400px;
        background-color: red;
      }
      #center {
        width: 200px;
        height: 200px;
        background-color: pink;
      }
    </style>
  </head>

  <body>
    <div id="app">
      <div id="outer" @click="outBlock">
        <div id="center" @click.self="centerBlock">
          <button @click="btn">按钮</button>
        </div>
      </div>
    </div>
  </body>
  <script>
    // stop 阻碍所有事件冒泡
    // self 只阻碍自己
    const app = new Vue({
      el: "#app",
      data: {},
      methods: {
        btn() {
          console.log("按钮被点击");
        },
        centerBlock() {
          console.log("中间被点击");
        },
        outBlock() {
          console.log("外部被点击");
        },
      },
    });
  </script>

3.7 组件之间 ,native

3.8 按键修饰符

在监听键盘事件时,我们经常需要判断详细的按键。此时,可以为键盘相关的事件添加按键修饰符,例如:

4. vue 的指令

4.1. 指令的概念

指令(Directives)是 vue 为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构

vue 中的指令按照不同的用途可以分为如下 6 大类:

内容渲染指令

属性绑定指令

事件绑定指令

双向绑定指令

条件渲染指令

列表渲染指令

4.2? 内容渲染指令

内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常用的内容渲染指令有如下:

(1) v-text

(2)? {{ }}

(3) v-htm

(4) v-clock

4.2.1 v-text

用法示例:

?注意:v-text 指令会覆盖元素内默认的值。

4.2.2 {{ }} 语法

vue 提供的 {{ }} 语法,专门用来解决 v-text 会覆盖默认文本内容的问题。这种 {{ }} 语法的专业名称是插值表达式(英文名为:Mustache)。

?注意:?

?1. 使用 插值表达式,存在内容闪烁的问题,但是,v-text没有闪烁问题;

?2. 在插值表达式中,可以使用 v-cloak 解决闪烁问题;

?3. 相对于 v-text 指令来说,插值表达式在开发中更常用一些!

4.2.3. v-html

v-text 指令插值表达式只能渲染纯文本内容。如果要把包含 HTML 标签的字符串渲染为页面的 HTML 元素, 则需要用到 v-html 这个指令:


  <body>
    <div id="app">
      <p v-text="username"></p>
      <p v-text="gender">性别:{{gender}}</p>
      <!-- v-text缺点:会覆盖元素内部原有的内容-->

      <hr />
      <p>姓名:{{username}}</p>
      <p>性别:{{gender}}</p>
      <hr />
      <div v-text="info"></div>
      <div>{{info}}</div>
      <div v-html="info"></div>
      <!-- 可以把带有标签的字符串,行内样式,渲染成真正的 HTML 内容! -->
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        username: "李白",
        gender: "男",
        info: '<h5 style="color: green; font-weight: bold;">欢迎大家来学习静夜思</h5>',
      },
    });
  </script>

?最终渲染结果:

?4.3? 属性绑定指令

如果需要为元素的属性动态绑定属性值,则需要用到 v-bind 属性绑定指令。用法示例如下:

注意插值表达式只能用在元素的内容节点中,不能用在元素的属性节点中!

属性绑定指令的简写形式:

由于 v-bind 指令在开发中使用频率非常高,因此,vue 提供了简写形式(简写为英文的 : )。?

?使用 Javascript 表达式:

在 vue 提供的模板渲染语法中,除了支持绑定简单的数据值之外,还支持 Javascript 表达式的运算,例如:

?注意:

v-bind: 指令中,如果想要实现表达式的拼接, 被拼接的 字符串,一定要 用 引号包裹起来, 否则,会被当作 变量解析?


  <body>
    <div id="app">
      <!-- vue 规定 v-bind: 指令可以简写为 : -->
      <input type="text" :placeholder="tips " />
      <hr />
      <img :src="photo" width="150px" />
      <div>1 + 2 的结果是:{{ 1 + 2}}</div>
      <div>{{tips}} 反转的结果: {{tips.split('').reverse().join('')}}</div>
      <!-- 先把字符串转数组,然后反转,然后转为字符串 -->
      <hr />
      <div :title="'box'+index">这是一个div</div>
      <!-- 元素都有一个title属性 -->
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        tips: "请输入用户名",
        photo: "https://cn.vuejs.org/images/logo.svg",
        index: 3,
      },
    });
  </script>

4.4 事件绑定指令

?vue 提供了 v-on 事件绑定指令,用来辅助程序员为 DOM 元素绑定事件监听。语法格式如下:

注意:原生 DOM 对象有 onclick、oninput、onkeyup 等原生事件,替换为 vue 的事件绑定形式后, 分别为:v-on:click、v-on:input、v-on:keyup?

通过 v-on 绑定事件处理函数,需要在 methods 节点中进行声明,?其提供了简写形式:?v-on:简写是:?@

<body>
    <div id="app">
      <p>count 的值是: {{count}}</p>
      <!-- add事件处理函数 -->
      <!-- v-on: 指令可以被简写为 @ -->
      <button @click="add">+1</button>
      <button @click="sub">-1</button>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        count: 0,
      },
      // 在 methods 处理函数中,this 就是 new 出来的 app 实例对象
      methods: {
        add() {
          console.log(app); //是个对象
          console.log(app === this);
          app.count += 1;
          // this.count++;
        },
        sub() {
          // 如果在方法中要修改 data 中的数据,可以通过 this 访问到
          this.count--;
        },
      },
    });
  </script>

?有一个参数:

第1种:可以不绑定参数。有参数,事件处理函数要带括号

<body>
    <div id="app">
      <p>count 的值是:{{count}}</p>
      <button @click="add(2)">+</button>
      <button @click="sub(3)">-</button>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        count: 0,
      },
      methods: {
        add(n) {
          this.count += n;
        },
        sub(n) {
          this.count -= n;
        },
      },
    });
  </script>

第2种:?绑定事件的时候如果不传参,默认会接受一个事件对象

<body>
    <div id="app">
      <p>count 的值是:{{count}}</p>
      <!-- vue 提供了内置变量,名字叫做 $event,它就是原生 DOM 的事件对象 e -->
      <button @click="add">+N</button>
      <!-- 绑定事件的时候如果不传参,默认会接受一个事件对象(PointerEvent鼠标事件) -->
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        count: 0,
      },
      methods: {
        add(e) {
          this.count += 1;
          console.log(e);
        },
      },
    });
  </script>

有2个参数:

"$event"的应用场景:如果默认的事件对象 e 被覆盖了,则可以手动传递一个 ?$event。例如:

案例:切换按钮变颜色

 <body>
    <div id="app">
      <p>count 的值是:{{count}}</p>
      <!-- 如果 count 是偶数,则 按钮背景变成红色,否则,取消背景颜色 -->
      <!-- vue 提供了内置变量,名字叫做 $event,它就是原生 DOM 的事件对象 e -->
      <button @click="add(1,$event)">+N</button>
    </div>
  </body>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        count: 1,
      },
      methods: {
        add(n, e) {
          this.count += n;
          // console.log(e);(PointerEvent 点击事件)
          if (this.count % 2 === 0) {
            // 偶数

            e.target.style.backgroundColor = "red";
            // style 是个对象
            // e.target 执行button DOM 元素
          } else {
            // 奇数
            e.target.style.backgroundColor = "";
          }
        },
      },
    });
  </script>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 15:59:25  更:2022-01-03 16:01:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:52:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码