Vue基础语法

Vue

Vuej简介

  • JavaScript框架
  • 简化Dom操作
  • 响应式数据驱动

Vue基础

el:挂载点

el是用来设置Vue实例挂载的元素

Vue会管理el选择命中的元素及其内部的后代元素

可以使用其他选择器,但建议使用ID选择器

可以使用其他双标签,但不能使用HTML和BODY

<body>
	<div id="app">
		<h1>{{name}}</h1>
	</div>
	<script>
		const v = new Vue({
			// 第一种挂载方式
			// el:"#app",
			data: {
				name: "hqyj"
			}
		})
		// 第二种挂载方式
		v.$mount("#app");
	</script>
</body>

应用根组件的内容将会被渲染在容器元素里面。容器元素自己将不会被视为应用的一部分.

.$mount("选择器类型") 方法应该始终在整个应用配置和资源注册完成后被调用。同时请注意,不同于其他资源注册方法,它的返回值是根组件实例而非应用实例

data:数据对象

  • Vue中用到的数据定义在data中
  • data中可以写复杂类型的数据
  • 渲染复杂类型数据,遵守js的语法
<body>
    <div id="app">
        {{message}}
        <h2>{{school.name}} {{school.mobile}}</h2>
        <ul>
            <li>{{campus[0]}}</li><br>
            <li>{{campus[1]}}</li><br>
            <li>{{campus[2]}}</li>
        </ul>
    </div>
</body>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            message: "你好,小黑子",
            school: {
                name: "黑马",
                mobile: "100"
            },
            campus: ["北京校区", "上海校区", "成都校区"]
        }
    })
</script>

Vue指令

v-text

插值语法:设置标签的文本值

//HTML
<div id="app">
       <h2 v-text="message">你好</h2>
</div>

//js
var app = new Vue({
        el: "#app",
        data: {
            message: "黑马程序员!!!!",
        }
    })
  • v-text 指令的作用是:设置标签的内容(textContent)
  • 默认写法会替换全部内容,使用差值表达式{{}}可以替换指定内容 建议使用{{}}
v-html
<body>
    <div id="app">
        <h2 v-html="content"></h2>
        <h2 v-text="content"></h2>
    </div>
</body>


<script>
    var app = new Vue({
        el: "#app",
        data: {
            // content: "黑马程序员"
            content: "<a href='http://www.baidu.com'>百度</a>"
        }
    })
</script>
  • v-html指令的作用是:设置元素的innerHTML
  • 内容有html结构会被解析为标签
  • v-text指令无论内容是什么,都只会解析为文本
  • 解析文本使用v-text,需要解析html结构使用v-html
v-on

为元素绑定事件

<body>
    <div id="app">
        <input type="button" value="v-on指令" v-on:click="doit">
        <input type="button" value="v-on指令" @click="doit">
        <input type="button" value="双击事件" @dblclick="doit">
        <h2 @click="changeFood">{{food}}</h2>
    </div>
</body>


<script>
    var app = new Vue({
        el: "#app",
        data: {
            food: "西蓝花炒蛋"
        },
        methods: {
            doit: function () {
                alert("做It");
            },
            changeFood: function () {
                // console.log(this.food)
                this.food += "好好吃!!"
            }
        },
    })
</script>
  • v-on指令作用是:为元素绑定事件
  • 事件不需要写on
  • 指令可以简写为@
  • 绑定的方法定义在methods属性中
  • 方法内部通过this关键字可以访问定义在data中数据
v-on(补充)
  • 事件绑定的方法写成函数调用的形式,可以传入自定义参数
  • 定义方法时需要定义形参来接受传入的实参
  • 事件的后面跟上 .修饰符可以对事件进行限制
  • .enter 可以限制处罚的按键为回车
  • 事件修饰符有很多种

练习:计数器

<body>
    <div id="app">
        <input type="button" @click="sub" value="-">
        <span>{{num}}</span>
        <input type="button" @click="add" value="+">

    </div>
</body>

</html>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            num: 1
        },
        methods: {
            add: function () {
                if (this.num == 10) {
                    alert("不能再加了哦!")
                } else {
                    this.num++;
                }
            },
            sub: function () {
                if (this.num == 0) {
                    alert("不能再减了哦!")
                } else {
                    this.num--;
                }
            }
        }
    })
</script>
  • 创建Vue示例时:el(挂载点),data(数据),methods(方法)
  • v-on 指令中的作用是绑定事件,简写为@
  • 方法中通过this,关键字获取data中的数据
  • v-text指令的作用是:设置元素的文本值,简写为{{}}
  • v-html指令的作用是:设置元素的innerHTML
v-show

根据表达值的真假,切换元素的显示和隐藏

<body>
    <div id="app">
        <input type="button" @click="changeShow" value="点击变身">
        <img v-show="isshow" src="../../img/钢铁侠.png">
        <img v-show="age>18" src="../../img/钢铁侠.png">
        <input type="button" @click="addAge" value="变大">

    </div>
</body>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            isshow: false,
            age: 16
        },
        methods: {
            changeShow() {
                this.isshow = !this.isshow;
            },
            addAge() {
                this.age++;
            }
        },
    })
</script>
  • v-show指令的作用是:根据表达式的真假,切换元素的显示状态
  • 原理是修改元素的display属性,实现显示、隐藏
  • 指令后面的内容,最终都会解析为布尔值
  • 值为true元素显示,值为false元素隐藏
v-if

根据表达式的真假,切换元素的显示和隐藏(操纵dom元素)

<body>
    <div id="app">
        <P v-if="isShow">黑马程序员</P>
        <input type="button" value="转换" @click="changeIsShow">
    </div>
</body>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            isShow: false
        },
        methods: {
            changeIsShow() {
                this.isShow = !this.isShow
            }
        }
    })
</script>
  • v-if 指令的作用是:根据表达式的真假,切换元素的显示状态
  • 本质是通过dom元素来切换显示状态
  • 表达式的值为true,元素存在于dom树中,为false,直接从dom树中移除 而v-show是通过改变display属性 元素仍在dom树中
  • 频繁的切换 使用v-show,反之使用v-if,前者的切换消耗小
v-bind

设置元素的属性(比如:src,title,class)

<body>
    <div id="app">
        <img v-bind:src="imgSrc" alt="">
        <br>
        <img :src="imgSrc" :title="imgTitle+'!!!'" :class="isActive?'active':''" @click="toggleActive"> //三目运算符修改class
        <br><br><br><br><br>
        <img :src="imgSrc" :title="imgTitle+'!!!'" :class="{active:isActive}" @click="toggleActive">//对象的方式修改class(建议)

    </div>
</body>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            imgSrc: "https://i0.hdslb.com/bfs/archive/041efa5e7e809fad89acc1c74ef0b3d0c3317d6d.jpg@672w_378h_1c_!web-home-common-cover.avif",
            imgTitle: "黑马程序员",
            isActive: false
        },
        methods: {
            toggleActive: function () {
                this.isActive = !this.isActive;
            }
        }
    })
</script>
  • v-bind指令的作用是:为元素绑定属性
  • 完整写法是:v-bind:属性名
  • 简写的话可以直接省略v-bind,只保留:属性名
  • 需要动态的增删class,建议使用对象的方式
v-for
<body>
    <div id="app">
        <input type="button" value="添加数据" @click="add">
        <input type="button" value="移除数据" @click="remove">
        <ul>
            <li v-for="(item,index) in arr"> //添加索引  item,index相当于for里的i 就是定义了一个变量
                {{index+1}}黑马程序员校区:{{item}}
            </li>
        </ul>
        <h2 v-for="item in vegetables" :title="item.name"> //可以同时用
            {{item.name}}
        </h2>
    </div>
</body>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            arr: ["北京", "东北", "长沙", "成都"],
            vegetables: [
                { name: "西蓝花炒蛋" },
                { name: "韭菜炒鸡蛋" }
            ]
        },
        methods: {
            add: function () {
                this.vegetables.push({ name: "花菜炒蛋" })
            },
            remove: function () {
                this.vegetables.shift();
            }
        }
    })
</script>
  • v-for指令的作用是:根据数据生成列表结构
  • 数组经常和v-for结合使用
  • 语法(item,index) in 数据
  • item 和 index 可以结合其他指令一起使用
  • 数组长度的更新会同步到页面上,是响应式的
v-model

获取和设置表单元素的值 (双向数据绑定)

<body>
    <div id="app">
        <input type="text" value="修改message" @click="setM">//通过事件绑定调用方法修改message 验证双向绑定
        <input type="text" v-model="message" @keyup.enter="getM">
        <h2>{{message}}</h2>
    </div>
</body>

<script>
    var app = new Vue({
        el: "#app",
        data: {
            message: "黑马程序员"
        },
        methods: {
            //通过绑定键盘松开事件 获取message值 并alert
            getM: function () {
                alert(this.message)
            },
            setM: function () {
                this.message = "钢铁侠";
            }
        }
    })
</script>
  • v-model指令的作用是便捷的设置和获取表单元素的值
  • 绑定的数据会和表单元素值相关联
  • 绑定的数据←→表单元素的值(双向绑定)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值