VUE-基本的写法
一:模板语法:
1.{{ }}:数据绑定最常见的形式就是使用 {{...}}(双大括号)的文本插值
2.v-html :指令用于输出 html 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 | < div id="app7"> < p >Using mustaches: {{ rawHtml }}</ p > < p >Using v-html directive: < span v-html="rawHtml"></ span ></ p > </ div > < script > var obj={ rawHtml:"< span >Hello jennifer</ span >" }; var vm=new Vue({ el:'#app7', data:obj, }); </ script >输出后的内容: |
Using mustaches: <span>Hello jennifer</span>
Using v-html directive: Hello jennifer
备注:你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容使用插值。
3.v-bind :HTML 属性中的值应使用 v-bind 指令(缩写:v-bind:href="url" / :href="url" )
4.v-if :根据表达式 seen 的值(true 或 false )来决定(v-if
指令将根据表达式 seen
的值的真假来插入/移除 <p>
元素。)
*.因为 v-if
是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个 <template>
元素当做不可见的包裹元素,并在上面使用 v-if
。最终的渲染结果将不包含 <template>
元素。
注意我们不推荐在同一元素上使用 v-if
和 v-for
。更多细节可查阅风格指南。
当它们处于同一节点,v-for
的优先级比 v-if
更高,这意味着 v-if
将分别重复运行于每个 v-for
循环中。当你只想为部分项渲染节点时,这种优先级的机制会十分有用
v-else:
v-else if:
5.v-show:指令来根据条件展示元素(v-show
只是简单地切换元素的 CSS property display
)
注意,v-show
不支持 <template>
元素,也不支持 v-else
。
一般来说,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show
较好;如果在运行时条件很少改变,则使用 v-if
较好。
6.v-for:我们可以用 v-for
指令基于一个数组来渲染一个列表。v-for
指令需要使用 item in items
形式的特殊语法,其中 items
是源数据数组,而 item
则是被迭代的数组元素的别名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < ul id="example-1"> < li v-for="item in items" :key="item.message"> {{ item.message }} </ li > </ ul > var example1 = new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ] } }) 结果: ·Foo ·Bar |
也可以用 of
替代 in
作为分隔符,因为它更接近 JavaScript 迭代器的语法:
1 | < div v-for="item of items"></ div > |
2.2.0+ 的版本里,当在组件上使用 v-for
时,key
现在是必须的。
5. v-on :它用于监听 DOM 事件(缩写:v-on:click="change" / @click="change")
事件修饰符
.stop
.prevent
.capture
.self
.once
.passive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!-- 阻止单击事件继续传播 --> < a v-on:click.stop="doThis"></ a > <!-- 提交事件不再重载页面 --> < form v-on:submit.prevent="onSubmit"></ form > <!-- 修饰符可以串联 --> < a v-on:click.stop.prevent="doThat"></ a > <!-- 只有修饰符 --> < form v-on:submit.prevent></ form > <!-- 添加事件监听器时使用事件捕获模式 --> <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 --> < div v-on:click.capture="doThis">...</ div > <!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> < div v-on:click.self="doThat">...</ div > |
使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self
会阻止所有的点击,而 v-on:click.self.prevent
只会阻止对元素自身的点击。
2.1.4 新增
1 2 | <!-- 点击事件将只会触发一次 --> < a v-on:click.once="doThis"></ a > |
2.3.0 新增 Vue 还对应 addEventListener
中的 passive
选项提供了 .passive
修饰符。
1 2 3 4 | <!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 --> <!-- 而不会等待 `onScroll` 完成 --> <!-- 这其中包含 `event.preventDefault()` 的情况 --> < div v-on:scroll.passive="onScroll">...</ div > |
按键修饰符
1 2 | <!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` --> < input v-on:keyup.enter="submit"> |
1 | *鼠标按钮修饰符 |
6.修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定
7.v-model :v-model 指令用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定
8.过滤器
9.v-once: 只要加上了这个属性,能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:
1 2 3 4 5 6 7 8 9 10 11 12 | < div id="app7"> < p v-on:click="message = 'jennifer'" v-once>{{message}}</ p > //加上了v-once后,点击事件不会执行了 </ div > < script > var obj={ message:"Hello world!" }; var vm=new Vue({ el:'#app7', data:obj, }); </ script > |
10.Object.freeze(obj):Object.freeze()
,这会阻止修改现有的 property,也意味着响应系统无法再追踪变化。
1 2 3 4 5 6 7 8 9 10 11 12 13 | < div id="app7"> < p v-on:click="message = 'jennifer'">{{message}}</ p > </ div > < script > var obj={ message:"Hello world!" }; Object.freeze(obj); //备注:这段代码的执行会阻止P标签的点击事件无效。 var vm=new Vue({ el:'#app7', data:obj, }); </ script > |
11.computed:计算属性(setter(做了修改后执行)、getter(未修改前的正常执行))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | < div id="app7"> < p >{{message}}</ p > < p >{{reversedMessage }}</ p > </ div > < script > var obj={ message:"Hello world!" }; var vm=new Vue({ el:'#app7', data:obj, computed:{ reversedMessage(){ return this.message=this.message.split("").reverse().join(".") } } }); </ script >上面的操作,我们可以通过在表达式中调用方法来达到同样的效果:< div id="app7"> < p >{{message}}</ p > < p >{{reversedMessage()}}</ p > </ div > < script > var obj={ message:"Hello world!" }; var vm=new Vue({ el:'#app7', data:obj, methods:{ reversedMessage(){ return this.message=this.message.split("").reverse().join(".") } } }); </ script >message |
12:watch:侦听属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < div id="app8">{{name}}</ div > < script > var vm=new Vue({ el:"#app8", data:{ firstName:"刘", lastName:"希贤" }, computed:{ name(){ return this.name=this.firstName+this.lastName } } }) </ script >结果输出:刘希贤方法二: |
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
filter()
、concat()
和slice()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具