导入方法和jq类似。<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
之后
<!-- 创建一个vue根节点 --><div class="app"><!-- 那么这里的所有内容都可以用vue实例进行管理 --><!-- 插值就是一个数据占位符 --><p>用户名: {{username}}</p><p>{{username + ', php.cn讲师'}}</p><p>10 + 30 = {{ 10 + 30}}</p><p>{{flag ? '上午好' : '睡觉了'}}</p></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({// 当前Vue的配置项// 挂载点// el: document.querySelector('.app') 可简写el:'.app',//data:{username:'张三',flag:false,}})
如何查看data
// 查看console.log(vm.$data.username);// 在data中声明的所有变量都自动变成vue实例的属性// 以上的过程就是数据注入console.log(vm.username);vm.username='李四';
<div class="app"><p v-text="username">李四</p></div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '.app',//不能挂在body和html上,它们有唯一性。data: {username: "张三",},})
v-text, v-html 在 html 中是不存在这样的属性的,它是专门由 Vue 实例管理的自定义属性,称之为“指令”。
v-text 指令 ====> innerText,textContent,它会覆盖掉原来的文本内容。p标签的李四会被张三覆盖
v-html
v-html 指令 ====> innerHTML, 它里边就不仅仅是纯文本了,还可以是 html 字符串
<div class="app"><p v-html="username">李四</p></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '.app',data: {username: "<em style='color:red'>王五</em>",},})</script>
v-bind 指令是一个高频指令,它的作用是动态地绑定一个或多个 属性,或一个组件 prop 到表达式。它可以简写成冒号 “:”。
<style>.active {color: violet;}.bigger {font-size: 2rem;}</style>
<div class="app" ><!-- 绑定style属性 --><p v-bind:style="style1">style: {{site}}</p><!-- v-bind:是高频指令可简写成冒号 --><p :style="`color:red`">style: {{site}}</p><!-- 绑定类class属性 --><p :class="`active bigger`">class1: {{site}}</p><p :class="class1">class2: {{site}}</p><!-- 控制样式的开关 --><p :class="{active: isActive, bigger: isBigger}">class3: {{site}}</p><p :class="[`active` ,`bigger`]">class4: {{site}}</p></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '.app',data: {site: 'php中文网',style1: 'color:red',class1: `active bigger`,isActive: true,isBigger: false,},})</script>

v-on 指令:绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。
v-on 指令同样是一个高频指令,它可以简写成 “@”
<div class="app" ><!-- 绑定事件 --><p><a href="https://php.cn" v-on:click="show">显示网站名称1</a></p><!-- 下面就阻止a标签的默认跳转行为 --><!-- 事件修饰符prevent:防止元素的默认行为 --><!-- v-on也是高频指令,可以简写为: @ --><p><a href="https://php.cn" @click.prevent="show">显示网站名称2</a></p><!-- stop:阻止冒泡 --><p><a href="https://php.cn" @click.prevent.stop="show">显示网站名称3</a></p><!-- 仅允许执行一次 --><p><a href="https://php.cn" @click.prevent.stop.once="show">显示网站名称仅一次</a></p><!-- 事件方法的传参 --><!-- 事件对象的参数名必须是 $event --><button @click.stop="handle($event, 100, 200)">click</button></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '.app',data: {site: 'php中文网',style1: 'color:red',class1: `active bigger`,isActive: true,isBigger: false,},methods: {show() {// this: 就是当前的vue实例对象alert(this.site)},handle(ev, a, b) {console.log(ev.type, ev.target);console.log("%d + %d = %d", a, b, (a + b));}},})</script>
一般情况下页面上的数据都是响应式的,也就是单向绑定,就是页面中的数据随着 vue 实例中的数据变化而变化,而 v-model 指令的作用就是在表单控件或者组件上创建双向绑定。只要任何一方的数据发生变动,另一方的数据也会发生变化。
<div class="app"><p>模型中的数据: {{site}}</p><p></p><!-- <p>双向绑定: <input type="text" :value="site" @input="site=$event.target.value"></p> --><!-- 因为这种双向绑定比较常用,vue提供了一个语法糖 --><!-- v-mode="site", ====> @input="site=$event.target.value" --><p>双向绑定: <input type="text" v-model.lazy="site"></p><p>双向绑定: <input type="text" v-model.number="num"></p><p>{{typeof num}}</p></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '.app',data: {site: 'php中文网',num: "0",}})// vm.site = 'php.cn'</script>
v-for:简单来说就是遍历一个数组/对象,不过在 vue 中的 v-for 不是那么简单,它可以用来动态的生成列表。
v-for 的默认行为会尝试原地修改元素而不是移动它们。要强制其重新排序元素,你需要用特殊属性 key 来提供一个排序提示。key 只能是整数或是不重复的字符串,只有唯一,它才可以作为排序时的关键信息。
<div class="app"><!-- key: 可以干预diff算法 --><!-- vue通过稳定且唯一的key值判断这个节点是否需要重新渲染, 以提升效率 --><!-- key只能是整数或不重复的字符串 --><ul><li v-for="(item,index) in items" :key="index">{{index}}--{{item}}</li></ul><ul><li v-for="(item,prop,index) in user" :key="prop">{{prop}}--{{index}}--{{item}}</li></ul><ul><li v-for=" (user, index) in users" :key="user.id">{{user.id}}--{{user.name}}--{{user.email}}</li></ul><span v-for="(n,i) in 10" :key="i">{{i}}--{{n}}<br></span></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: ".app",data: {// 数组items: ["合肥", "苏州", "杭州"],// 对象user: {name: "天蓬",email: "tp@php.cn",},// 对象数组, 数据表的查询结果就是一个二个这样的二维的JSONusers: [{ id: 1, name: "天蓬", email: "tp@php.cn" },{ id: 2, name: "灭绝", email: "mj@php.cn" },{ id: 3, name: "西门", email: "xm@php.cn" },],},});</script>

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号