写点什么

vue 入门:简单指令介绍

用户头像
小黄鸡1992
关注
发布于: 3 小时前
vue入门:简单指令介绍

本教程为入门教程,如有错误,请各位前端大佬指出。

1.为什么使用 vue

  • 业务越来越复杂,更多操作在前段进行。

  • 渐进式

  • 不需要操作 dom

  • 双向绑定

  • 环境构建方便

  • 组件开发

  • 社区活跃

2.vue 入口

main.js 为主入口


import Vue from 'vue'import App from './App'import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */new Vue({ el: '#app', router, components: { App }, //指定进入app.vue template: '<App/>'})
复制代码

3.基本指令

1.{{}}与 v-html

用于打印与输出。


<template><div><!-- 表达式 --><p>{{1+1>1 ? '是':'否'}}</p>{{msg}}<div v-html = "msg"></div></div></template>
<script>export default {name: 'HelloWorld',el: '#app',
data () { return { msg:'<h1>我是消息</h1>'}}}</script>
复制代码

2.v-bind

v-bind 就是用于绑定数据和元素属性的


<template><div v-bind:class = "active" v-bind:id=id>{{msg}}  </div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { msg:'<h1>我是消息</h1>', active:"active", id:19}}}</script>
复制代码

3.class 与 style

class 的绑定方式。


<template><div><p v-bind:class="{ active: isActive }" v-bind:id=id>aaa</p><p v-bind:class="{ active: 10>1?true:false,test:true }" >bbb</p><p v-bind:class='[msg]' >ccc</p><p v-bind:class="[{active :0 > 1},'test']" >ddd</p><ul><li v-bind:class ="[{active :index/2==0},'test']" v-for = "(item,index) in names">{{item.name}}</li></ul><p v-bind:style="{color: activeColor, fontSize: fontSize + 'px' }">eee</p></div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { msg:'<h1>我是消息</h1>', isActive:false, names:[{ name:"aaa" },{ name:"bbb" },{ name:"ccc" }], activeColor: 'red', fontSize: 30}}}</script>
复制代码

4.观察指令 method 和 computed

method 和 computed 区别:


我们可以将同一函数定义为一个方法而不是一个计算属性。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。这就意味着只要 msg还没有发生改变,多次访问 showMessage计算属性会立即返回之前的计算结果,而不必再次执行函数。


函数执行需要 数据属性里面的 message 值作为参数。


● 如果使用 methods 执行函数,vue 每次都要重新执行一次函数,不管 msg 的值是否有变化;


● 如果使用 computed 执行函数,只有当 msg 这个最初的数据发生变化时,函数才会被执行。(依赖-监测数据变化)


<template><div id="example">  {{ msg.split('').reverse().join('') }}  {{ showMessage}}</div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { msg:'我是消息'}},computed: { showMessage(){ return this.msg.split('').reverse().join('') }}}</script>
复制代码

5.条件渲染

v-if,v-else 顾名思义,判断是否可以显示。


<template><div ><p v-if="sign">1111</p><p v-else>2222</p></div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { sign:true, msg:'<h1>我是消息</h1>', active:"active", id:19}}}</script>
复制代码


  • v-if:每次都会重新删除或创建元素,具有较高的切换性能消耗;

  • v-show:每次切换元素的 display:none 样式,具有较高的初始渲染消耗。

  • v-show 只编译一次,后面其实就是控制 css,而 v-if 不停的销毁和创建,故 v-show 性能更好一点。


<template><div ><p v-show="sign">1111</p></div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { sign:true, msg:'<h1>我是消息</h1>', active:"active", id:19}}}</script>
复制代码

6.列表输出

v-for 用于循环列表。


<template><div ><ul><li v-bind:key ="index" v-for = "(item,key,index) in names">{{item.age}}-{{item.name}}-{{index}}||{{item}}||{{key}}</li></ul></div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { sign:true, msg:'<h1>我是消息</h1>', names:[{ name:"aaa", age:19, sex:"1" },{ name:"bbb", age:20, sex:"1" },{ name:"ccc", age:21, sex:"1" }]}}}</script>
复制代码

7.数组更新

注意:filter()concat() 和 slice()不发生更新


<template><div ><ul><li v-bind:key ="index" v-for = "item in names">{{item.name}}</li></ul><button v-on:click = "clickbutton" name = "button" type = "button">按钮</button></div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { sign:true, msg:'<h1>我是消息</h1>', names:[{ name:"aaa" },{ name:"bbb" },{ name:"ccc" }]}},methods: { clickbutton(event){ this.names.push({name:"ddd"}) }},}</script>
复制代码

8.事件处理

v-on:当执行 xx 动作时执行 xx 函数。


<template><div><button v-on:click = "count +=1" type = "button" name = "button">按钮</button><p>{{count}}</p><button v-on:click = "clickhandle" type = "button" name = "button">按钮2</button><p>{{demoshow}}</p><button v-on:click = "chance" type = "button" name = "button">按钮3</button><button v-on:click.once = "senddate('你好',$event)" type = "button" name = "button">按钮4</button></div></template>
<script>export default {name: 'HelloWorld',el: '#app',data () { return { count:1, demoshow:"帅小伙"}},methods: { clickhandle(event){ console.log("触发") }, chance(event){ this.demoshow = "我不是帅小伙" }, senddate(data,event){ console.log(data,event) }}}</script>
复制代码

9.事件修饰

<!-- 阻止单击事件继续传播 --><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>
复制代码

10.键盘事件

<template><div><input  v-on:keyup.enter = "showlog" name = "button">输入框</button></div></template><script>export default {name: 'HelloWorld',el: '#app',data () {  return {    count:1}},methods: {  showlog(event){     console.log(event)  }}}</script>
复制代码


其余键盘操作介绍:


.enter.tab.delete (捕获“删除”和“退格”键).esc.space.up.down.left.right.ctrl.alt.shift.meta 等 请参考文档
复制代码

11.表单输入

双向数据绑定指令 lazy,number,trim。


<template><div><input v-model.lazy="message" placeholder="edit me"><p>Message is: {{ message }}</p><button v-on:click = "getMsg" type = "button" name = "button">按钮</button></div></template><script>export default {name: 'HelloWorld',el: '#app',data () {  return {    message:"这是一个消息"}},methods: {  getMsg(event){     console.log(this.message)  }}}</script>
复制代码


.lazy在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change 事件进行同步:<!-- 在“change”时而非“input”时更新 --><input v-model.lazy="msg" >
.number如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符:<input v-model.number="age" type="number">这通常很有用,因为即使在 type="number" 时,HTML 输入元素的值也总会返回字符串。如果这个值无法被 parseFloat() 解析,则会返回原始的值。

.trim如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:<input v-model.trim="msg">
复制代码


用户头像

小黄鸡1992

关注

还未添加个人签名 2021.07.13 加入

还未添加个人简介

评论

发布
暂无评论
vue入门:简单指令介绍