Vue.js框架的介绍和基础指令语法(view层)相关操作及案例

本文详细介绍了Vue.js框架的概念、功能,并深入讲解了Vue中的MVC、MVP、MVVM架构模式。此外,文章还探讨了Vue的核心指令,如插值表达式、内容指令(v-text与v-html的区别)、属性指令、条件指令(v-if与v-show的对比)、循环指令(v-for的使用)以及其他指令,如v-pre和v-cloak。通过实例展示了Vue如何实现数据驱动和组件化的开发模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是框架

概念:将函数进行封装,多个函数封装形成一个模块,多个模板组成了框架。

功能:框架改变了编程思想和代码的整体结构;使得模块内部高内聚,模块之间低耦合,提升了维护性及代码的分工与配合。

框架模式

mvc架构模式:model模型 view视图 controller控制器

模型完成数据的增删改查,视图负责数据的显示,控制器是中间层负责核心流程

mvp架构模式:model模型 view视图 presenter控制器

两者区别:mvc架构模式,视图可直接绕过控制器,直接从model中获取数据;mvp架构模式,视图从控制器中获取数据

mvvm架构模式:model模型 view视图 viewmodel控制器

mvvm采用的是双向绑定方式,视图可改变模型,模型可以改变视图,vm负责之间的通信,vue采用该架构模式


什么是Vue

概念:vue是构建数据驱动的web应用开发框架

两个核心:数据驱动 组件化

基本理解:new出来一个Vue实例,传一堆配置参数,控制一片html


Vue语法(view层)

插值表达式

功能:可以让html标签里的内容变成动态的从data中获取数据

指令:{{变量/属性名/表达式/函数调用}}

    <!-- //view 视图:显示数据 -->
        <div id="box">
            <p>{{str}}</p>
            <p>{{str2}}</p>
        </div>

    let text=123
    let vm = new Vue({
        //element,是一个选择器,表示vue对象里的数据,会显示在id为box的元素里
        el: "#box",
        //m:model,数据模型
        data: {
            str: text,
            str2: "坚持到15号"
        }

    })


内容指令

功能:让标签的内容变成动态的从data中获取

指令:v-text=""/v-html=""

    <div id="box">
            <p>{{str}}</p>
            <p>我是{{str}}</p>
            <hr >
            <p v-html="str"></p>
        </div>

    let vm=new Vue({
        el:"#box",
        data:{
            str:"hello"
        }
    })

v-text与v-html的区别:

  • v-html等价于innerHTML,v-text等价于innerText
  • v-html没有做转义,v-text做了转义

<div id="box">
            <p v-html="str"></p>
            <p v-text="str"></p>
            <p></p>
        </div>

    let vm=new Vue({
        el:"#box",
        data:{
            str:"<b>hello</b>"
        }
    })
    

内容指令添加内容与插值表达式添加内容两个方式之间的区别:

  • 插值表达式比较灵活,可以控制标签里的某一部分内容,v-html和v-text会将内容全部修改并覆盖
  • 插值表达式在网速比较慢时,能够瞬间看到带着花括号的原型

属性指令

功能:让标签的属性名或属性值变为动态

属性值绑定指令:v-bind:属性名="值"

属性名绑定指令:v-bind:[属性名]="值"

<div id="box">
            <img v-bind:src="img">
            <hr>
            <img v-bind:[attr]="img">
            <div v-bind:style="s">
            </div>
        </div>

    let vm = new Vue({
        el: "#box",
        data: {
            img: "imgs/1.jpg",
            attr: "src",
            s: "width:200px;height:300px;border:1px solid red"
        }
    })

属性值为布尔值的情况:

<div id="box">
            <input type="button" name="" id="" value="测试" v-bind:disabled="bool" />
        </div>

    let vm = new Vue({
        el: "#box",
        data: {
            bool: false
        }
    })

 ps:如果bool值为null、undefined、false则disabled属性不会渲染出来


条件指令

功能:可以根据条件语句的布尔值决定是否渲染

指令:v-if=""/v-show=""

<div id="box">
            <!-- <p v-if="show">小孩</p> -->
            <p v-if="age<18">小孩</p>
            <p v-else-if="age<=30">你不是再小孩了</p>
            <p v-else>年级大了</p>
        </div>

    let vm = new Vue({
        el: "#box",
        data: {
            show: true,
            age: 17
        }
    })

v-if和v-show的区别:

 相同点:都能控制dom元素的显示和隐藏

不同点:v-show是控制元素的display属性,v-if是直接删除或添加dom节点
              v-show适合元素显示隐藏频繁切换的场景,v-if适合不频繁切换的场景


循环指令

功能:将数据进行循环并显示在html中,推荐操作数组、对象、字符串、数字

指令:v-for="(value,key) in 数据"

ps:除对象是key外其他数据类型都是索引index

<ul>
                <li v-for="(item,index) in booksobj">
                    <p>序号:{{index+1}}</p>
                    <p>书号:{{item.id}}</p>
                    <p>书名:{{item.name}}</p>
                    <p>作者:{{item.author}}</p>
                </li>
            </ul>

let vm = new Vue({
        el: "#box",
        data: {
            booksobj: [{
                id: "001",
                name: "三国",
                author: "老罗"
            }, {
                id: "002",
                name: "水浒",
                author: "老施"
            }]
        }
    })

循环可以进行嵌套:

<li v-for="item in books">
                    <p v-for="(val,key) in item">{{key}}:{{val}}</p>
</li>

循环和if判断:

 <li v-for="val in list" v-if="val.or">{{val.text}}</li>

let vm = new Vue({
        el: ".box",
        data: {
            list: [{
                    text: "嘿嘿",
                    or: false
                },
                {
                    text: "哈哈",
                    or: true
                }
            ]
        }
    })

循环里的key:

 <li v-for="book in books" v-bind:key="book.id">
                    <p v-for="(val,key) in book">{{key+""+val}}</p>

在标签里使用属性key,可以唯一标识一个元素。

用循环更新已渲染过的元素列表时,默认就地复用原则,尽量不对dom操作,只更新文本

如果需要对dom进行操作,可以使用key属性,这样可以跟踪每个节点的身份,从而重新排序


其他指令

v-pre:带有v-pre的标签在vue进行编译时跳过,可以加在父元素或子元素身上,从而可以对大量没有指令的节点进行跳过,加快了编译速度

v-cloak:防闪烁,模板没有编译完,网速差时会看到花括号的原型,可以用css先隐藏,等vue编译完成之后再显示出来,用户不会看到原型,需要搭配css使用[v-cloak]{display: none;}

v-once:任何事件无法更改其第一次渲染的数据值


在需要vue解析的标签中可以使用js表达式

<div id="box">
            <p>我是{{str}}</p>
            <p>我是{{str+"嘿嘿"}}</p>
            <hr>
            <p>{{bool==true?"成年":"未成年"}}</p>
            <hr>
            <img v-bind:src="'imgs/'+index+'.jpg'">
        </div>

let vm = new Vue({
        el: "#box",
        data: {
            str: "hi",
            bool: false,
            index: "1"
        }
    })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值