Vue渐进式框架

目录

一.Vue介绍

二.开发模式

三.下载

四.插值表达式

五.指令


一.Vue介绍

是一个前端开发过程中基于数据驱动的一个渐进式框架(数据驱动,不操作DOM结构,通过操作数据驱动DOM结构的渲染)

二.开发模式

Vue框架中封装的内容:MVVM中的VM,即视图和数据绑定。

M:全称Model,表示数据

V:全称View,表示视图,即页面显示内容

VM:全称ViewModel,即视图和数据绑定。数据改变驱动视图改变,视图改变驱动数据改变。

三.下载

1.下载Vue

//在命令窗口中输入
npm i Vue@2   //@2是指定版本

2.引入文件

<script src="./node_modules/vue/dist/vue.min.js"></script>

3.模版使用

const app = Vue.createApp({
      data () {
        return {
          
        }
      }
    })mount('#app')

4.显示数据

<div id="app">
    <p>{{msg}}</p>
</div>

5.完整页面结构

<body>
  <div id="app">
    <p>{{ str }}</p>
  </div>
</body>
  <script src="./node_modules/vue/dist/vue.global.js"></script>
  <script>
    /*
      认识 vue
        + 目前市场的 vue 版本
          => Vue@2 - 一种语法
          => Vue@3
            -> 语法A
            -> 语法B
          => vue@3 的 A语法叫做 选项式 API
          => vue@3 的 B语法叫做 组合式 API
          => Vue@3 的选项式API 就是 Vue@2 的语法
  */

    // 1. 创建一个 Vue 实例
    const app = Vue.createApp({
      data () {
        return {
          str: 'hello Vue',
        }
      }
    }). mount('#app')

此时页面显示

hello Vue

四.插值表达式

{{变量名、三元运算、字符串方法、函数调用、运算符等等 }}

五.指令

  • 1.v-text-------同innerText含义相同表示内容但不包括标签
  • 2.v-html-------解析便签
<div id="app">
    <!-- 默认,v-text和插值表达式都不能解析标签 -->
    <p v-text="jiaocheng"></p>
    <p>{{jiaocheng}}</p>
    <!-- v-html虽然能解析标签,但不建议使用 - 有安全隐患,xss攻击 -->
    <p v-html="jiaocheng"></p>
</div>
<script>
   const app = Vue.createApp({
      data () {
        return {
        jiaocheng: '<b>js教程</b>'
        }
      }
    }). mount('#app')
</script>
  • v-once------数据只发生一次
<div id="app">
    <p v-once="jiaocheng"></p>
</div>
<script>
   const app = Vue.createApp({
      data () {
        return {
        jiaocheng: 'js教程'
        }
      }
    }). mount('#app')
</script>
  • v-cloak----解决页面闪烁效果

<style>
    [v-cloak]{
        display: none;
    }
</style>
<body>
<div id="app">
    <!-- 解决闪烁问题 -->
    <!-- v-cloak 属性是内容在渲染成功之前会显示,内容显示之后就会隐藏 -->
    <!-- 利用这个指令的特性,用属性选择器给这个标签设置隐藏 -->
    <p v-cloak>{{msg}}</p>
</div>
</body>
<script>
 const app = Vue.createApp({
      data () {
        return {
        msg:'hello Vue'
        }
      }
    }). mount('#app')
</script>
  • v-bind---标签的属性值要使用定义好的数据,就可以给这个属性添加v-bind--简写:"  :  "
<body>
<div id="app">
    <!-- 当标签上的属性要使用数据的时候,这个属性要被v-bind指令修饰 -->
    <img v-bind:src="imgPath" v-bind:alt="msg">
    <!-- 因为v-bind指令很常用,所以vue提供了一个简写语法:在属性前加冒号即可 -->
    <img :src="imgPath" :alt="msg">
</div>
</body>
<script>
const app=Vue.createApp({
    data: {
return{
        msg: 'hello',
        imgPath: 'https://t7.baidu.com/it/u=1109365764,3421420386&fm=218&app=126&size=f242,150&n=0&f=JPEG&fmt=auto?s=F4D07C85CE1275CC6B8C14A803003090&sec=1683306000&t=b140e9d2d68bba81068c66a29f5897da'
    }
}).mount('#app')
</script>
  • v-on--绑定事件--简写@事件
<div id="app">
    <div v-on:click="handler">123</div>
    <div @click="handler">456</div>
  </div>
<script>
 const app= Vue.createApp 
      data () {
        return {
         handler: 'hello world'
        }
      },
      methods: {
        handler () {
          console.log('你好 世界, 我是写在 methods 内的 handler 函数')
        },
      }
    }).mount('#app')

methods是Vue中的模版表达式

事件函数传参注意点:

$event - 事件对象

this - window

事件类型后可以有修饰符(在事件类型后.修饰符):

stop - 阻止冒泡

prevent - 阻止默认行为

enter - 回车键

  • v-for--遍历数组或对象
<div id="app">
    <p>vue 的循环</p>
    <ul>
      <!-- 需要循环 list 数据创建 li -->
      <li v-for="item in list">{{ item }}</li>
    </ul>
    <ul>
      <!-- 需要循环 list 数据创建 li -->
      <li v-for="(item, index) in list">{{ item }} ---- {{ index }}</li>
    </ul>

    <ul>
      <!-- 需要循环 list 数据创建 li -->
      <li v-for="item in num">{{ item }}</li>
    </ul>

    <ul>
      <!-- 需要循环 list 数据创建 li -->
      <li v-for="item in str">{{ item }}</li>
    </ul>

    <ul>
      <!-- 需要循环 list 数据创建 li -->
      <li v-for="item in cart">{{ item.id }}</li>
    </ul>
  </div>

  <script src="./node_modules/vue/dist/vue.global.js"></script>
  <script>
    /*
      Vue 的循环
        + 万物皆可循环
        + 循环使用的指令 v-for
        + 语法: <标签 v-for="(每一项, 索引) in 循环的内容"></标签>
          => 如果只需要每一项, 可以不接受第二个形参
    */

    const { createApp } = Vue

    createApp({
      data () {
        return {
          list: [ 100, 200, 300, 400 ],
          num: 6,
          str: 'hello',
          cart: [ { id: 1 }, { id: 2 }, { id: 3 } ]
        }
      }
    }).mount('#app')
  • v-if--判断语句/v-show--控制标签显示隐藏

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    form {
      width: 500px;
      padding: 20px;
      border: 10px solid pink;
      border-radius: 10px;
      margin: 50px auto;
    }

    form > label {
      height: 60px;
      position: relative;
      display: block;
    }

    form > label > span {
      height: 20px;
      position: absolute;
      left: 0;
      bottom: 10px;
      font-size: 20px;
      color: red;
    }
  </style>
</head>
<body>
  <div id="app">

    <div class="header">
      <p v-if="boo">您好 <a href="">请登录</a></p>
      <!-- <p v-else>您好 <span>xxx</span><a href="">个人中心</a><button>退出登录</button></p> -->
      <p v-if="!boo">您好 <span>xxx</span><a href="">个人中心</a><button>退出登录</button></p>
    </div>

    <p>Vue 的条件分支</p>
    <input type="text" v-model="search">
    <!-- 根据 search 这个内容决定该 div 是否渲染 -->
    <div v-if="search">
      我是相关搜索内容的展示盒子 v-if
    </div>
    <div v-show="search">
      我是相关搜索内容的展示盒子 v-show
    </div>

    <form>
      <label>
        用户名: <input type="text" v-model="username">
        <span v-if="usernameBoo">用户名不符合规则, 请重新填写 ^_^</span>
      </label>
    </form>



  </div>
  <script src="./node_modules/vue/dist/vue.global.js"></script>
  <script>
    /*
      vue 的条件分支

      需求约定 :
        + search 有内容的时候, div 展示
        + search 没有内容的时候, div 隐藏

      利用一个叫做 v-if 的指令
        + <标签 v-if="条件"></标签>
        + 意义: 如果这个条件为 true, 该标签 **渲染**, 否则 **不渲染**

      利用一个叫做 v-show 的指令
        + <标签 v-show="条件"></标签>
        + 意义: 如果这个条件为 true, 改标签的 display 为 block, 否则为 none

      区别:
        + v-if: 渲染不渲染(有没有这个标签)
        + v-show: 显示不显示(display 是不是 none)

      区别:
        + v-if 是个组合指令
          => v-else-if
          => v-else
        + v-show 只有自己一个

    */
    const { createApp } = Vue

    createApp({
      data () {
        return {
          search: '',
          boo: true,
          usernameBoo: false,
          username: ''
        }
      },
      watch: {
        username (newVal, oldVal) {
          this.usernameBoo = !/^\w{6,12}$/.test(newVal)
        }
      }
    }).mount('#app')
  </script>
</body>
</html>

v-else和v-else-if必须紧跟v-if所在标签

·v-model--视图和数据双向绑定

<body>
  <div id="app">
    <p>双向数据绑定</p>
    <p>{{ str }}</p>
    <button @click="clickHandler">修改 str</button>

    <!-- 从一个实际需求触发: 搜索框 -->
    <!-- 随着你写入的内容不一样, 随时更改搜索的内容 -->
    <input type="text" @input="inputHandler" :value="str">

    <p>{{ info }}</p>
    <input type="text" v-model="info">
  </div>
  <script src="./node_modules/vue/dist/vue.global.js"></script>
  <script>
    /*
      双向数据绑定
        + 把数据中的某一项内容渲染在也 页面视图 内
          => 随着数据的变化让 视图 发生变化
        + 捕获到你在修改表单的行为
          => 随着视图的变化, 随时让数据发生变化
        + Vue 给出了对应的指令 v-model
          => <标签 v-model="变量"></标签>
          => 直接帮你实现双向数据绑定
            -> 实现原理 : v-on:input 和 v-bind:value 配合在一起使用

      响应式
        + 当数据发生变化的时候, 会自动讲结果响应的视图位置
        + 讲视图进行修改
    */
    const { createApp } = Vue

    createApp({
      data () {
        return {
          str: 'hello',
          info: ''
        }
      },
      methods: {
        clickHandler () {
          this.str = '修改后'
        },
        inputHandler (e) {
          console.log('你写入的内容发生了变化')
          console.log(e.target.value)
          this.str = e.target.value
        }
      }
    }).mount('#app')
 </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值