第6天:Vue框架快速上手

前端环境准备

编码工具:VSCode
依赖管理:NPM
项目构建:VueCli

Vue框架介绍

Vue框架概要

vue官方文档:https://cn.vuejs.org/guide

  • Vue是一套用于构建用户界面的渐进式框架。
  • Vue.js提供了MVVM数据绑定和一个可组合的组件系统,具有简单、灵活的API。
  • 其目标是通过尽可能简单的API实现响应式的数据绑定和可组合的视图组件。
  • 比早期的前端框架更适合多人协作开发。

MVVM模式

MVVM是Model-View-ViewModel的缩写,它是一种基于前端开发的架构模式,其核心是提供对View和ViewModel的双向数据绑定。
Vue提供了MVVM风格的双向数据绑定,核心是MVVM中的VM,也就是ViewModel,ViewModel负责连接View和Model,保证视图和数据的一致性。
绑定过程由Vue来完成,可以理解为Vue实现了ViewModel的功能,并且屏蔽了DOM操作。
在这里插入图片描述

Vue快速入门

01.基本用法

  • 导入vue.js的script脚本文件
<script src="https://unpkg.com/vue@3"></script>
  • 在页面中声明一个将要被vue所控制的DOM区域,即MVVM中的View
<div id="app">
    {
   
   {message}}
</div>
  • 创建vm实例对象(vue实例对象)
<script>
        // 创建VM对象挂载到id="app"区域
        createApp({
      
      
            //指定数据源,即MVVM中的Model
            data() {
      
      
                return {
      
      
                    message: 'Hello Vue!'
                }
            }
        }).mount('#app')//指定当前vue实例要控制页面的哪个区域
    </script>

运行结果:
在这里插入图片描述

02.内容渲染指令

<body>
    <div id="app">
        <p>姓名:{
   
   {username}}</p>
        <p>性别:{
   
   {gender}}</p>

        <!-- 花括号遇到html的内容时候默认是字符串,不会当做标签进行渲染 -->
        <p>{
   
   {desc}}</p>
        <p v-html="desc"></p>

    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    username: 'zhangsan',
                    gender: '男',
                    desc: '<a href="http://www.baidu.com">百度</a>'
                }
            }
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>

</body>

运行结果:
在这里插入图片描述

03.属性绑定指令

<body>
    <div id="app">
        <!-- 只要带冒号,后面就是变量或者表达式 -->
        <a :href="link">百度</a>
        <input type="text" :placeholder="inputValue">
        <img :src="imgSrc" :style="{width:w}" alt="">

    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    link: "http://www.baidu.com",
                    //文本框的占位符内容
                    inputValue: '请输入内容',
                    //图片的src地址
                    imgSrc: './images/astronaut.png',
                    w: '500px'
                }
            }
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>

</body>

运行结果:
在这里插入图片描述

04.使用JavaScript表达式

<body>
    <div id="app">
        <p>{
   
   {number+1}}</p>
        <p>{
   
   {ok ? 'True' : 'False'}}</p>
        <!-- 字符串倒置 -->
        <p>{
   
   {message.split('').reverse().join('')}}</p>
        <p :id="'list-'+id">xxxx</p>
        <p>{
   
   {user.name}}</p>

    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    number: 9,
                    ok: false,
                    message: 'ABC',
                    id: 3,
                    user: {
      
      
                        name: 'zs',
                    }

                }
            }
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

05.事件绑定指令

<body>
    <div id="app">
        <h3>count的值为:{
   
   {count}}</h3>
        <!-- 两个按钮效果一样,都是+1 -->
        <button v-on:click="addCount">+1</button>
        <!-- v-on:等价@ -->
        <button @click="count+=1">+1</button>
    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    count: 0,
                }
            },
            methods: {
      
      
                //点击按钮,让count自增+1
                addCount() {
      
      
                    //this代表当前的vm对象
                    this.count += 1
                },
            },
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

06.条件渲染指令

<body>
    <!-- 根据条件控制元素是否能够显示 -->
    <div id="app">
        <button @click="flag=!flag">Toggle Flag</button>

        <!-- v-if和v-show区别:
            网页渲染出来的源码只有一个p标签,v-if的值是false,标签不会被创建;
            v-show值是false标签会被创建出来,没有显示的原因是通过css的方式进行隐藏 style="display:none"
            如果标签需要频繁被切换使用v-show,性能更高
         -->
        <p v-if="flag">请求成功 --- 被v-if控制</p>
        <p v-show="flag">请求成功 --- 被v-show控制</p>

    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    flag: false,
                }
            }
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述
点击“Toggle Flag”按钮
在这里插入图片描述

07. v-else和v-else-if指令

<body>
    <div id="app">
      <p v-if="num > 0.5">随机数 > 0.5</p>
      <p v-else>随机数 ≤ 0.5</p>
      <hr />
      <p v-if="type === 'A'">优秀</p>
      <p v-else-if="type === 'B'">良好</p>
      <p v-else-if="type === 'C'">一般</p>
      <p v-else></p>
    </div>

    <script>
      const vm = {
      
      
        data: function(){
      
      
          return {
      
      
            // 生成 1 以内的随机数
            num: Math.random(),
            // 类型
            type: 'A',
          }
        }
      }
      const app = Vue.createApp(vm)
      app.mount('#app')
    </script>
  </body>

运行结果:
在这里插入图片描述

08.列表渲染指令

<body>
    <div id="app">
        <ul>
            <!-- (user,i)元素和索引 -->
            <!-- <li v-for="user in userList">索引是:{
    
    {i}} , 姓名是:{
    
    {user.name}}</li> -->
            <li v-for="(user,i) in userList">索引是:{
   
   {i}} , 姓名是:{
   
   {user.name}}</li>
        </ul>

    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    userList: [{
      
      
                        id: 1,
                        name: 'zhangsan'
                    }, {
      
      
                        id: 2,
                        name: 'lisi'
                    }, {
      
      
                        id: 3,
                        name: 'wangwu'
                    }, ],
                }
            },
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

09.v-for中的key

<body>
    <div id="app">
        <!-- 添加用户的区域 -->
        <div>
            <!-- 单向绑定:name改变,页面改变;页面改变,name不改变 -->
            <!-- <input type="text" :value="name"> -->
            <!-- 双向绑定:name改变,页面改变;页面改变,name改变 -->
            <input type="text" v-model="name">
            <button @click="addNewUser">添加</button>
        </div>
        <!-- 用户列表区域 -->
        <ul>
            <!-- key属性,为每个循环的标签加上唯一的索引 -->
            <!-- 但是仍然存在问题:选中第一个用户后,添加一个用户,选中变成新添加的用户
                解决:将数据库的组件查询出来,设置到key的值位置 -->
            <!-- <li v-for="(user, index) in userlist" :key="index"> -->
            <li v-for="(user,index) in userlist" :key="user.id">
                <input type="checkbox" /> 姓名:{
   
   {user.name}}
            </li>
        </ul>
    </div>

    <script>
        const vm = {
      
      
            data: function() {
      
      
                return {
      
      
                    //用户列表
                    userlist: [{
      
      
                        id: 1,
                        name: 'zhangsan'
                    }, {
      
      
                        id: 2,
                        name: 'lisi'
                    }],
                    //输入的用户名
                    name: '',
                    //下一个可用的id值
                    nextId: 3

                }
            },
            methods: {
      
      
                //点击了添加按钮
                addNewUser() {
      
      
                    // 在数组最起始位置添加
                    this.userlist.unshift({
      
      
                        id: this.nextId,
                        name: this.name
                    })
                    this.name = ''
                    this.nextId++
                }
            }
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述
点击添加后
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46443403/article/details/128979149
今日推荐