Vue.js指令

一、条件渲染指令

条件渲染指令主要包括:v-if、v-else、v-show指令。

1.1 V-if 指令

语法:v-if=' 表达式 '

根据表达式结果的真假来确定是否显示当前元素,如果表达式为true,显示该元素;如果表达式为false,则隐藏该元素。

示例代码(HelloWorld.vue):

<template>
  <div class="hello">
    <h1 v-if="isShow">表达式的值为真就能显示</h1>
  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      isShow:true
    }
  }
}
</script>

<style scoped>
h1{
  font-size:20px;
  font-weight: normal;
}
</style>

在<template>元素上使用v-if条件渲染分组

因为 v-if 是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个 <template> 元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 <template> 元素。

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

1.2 v-else 指令

v-else指令就是为v-if指令添加了一个else块,v-else元素必须紧跟在v-if元素的后面,否则不能被识别。

语法:v-else指令后面不需要再跟表达式,如果v-if为true,后面的v-else不会被执行;如果v-if为false,后面的v-else才会被执行进行渲染到html中。

示例代码(HelloWorld.vue)

<template>
  <div class="hello">
    <h1 v-if="isShow">表达式的值为真就能显示</h1>
    <h1 v-else>当v-if不成立的时候才显示</h1>
  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      isShow:false
    }
  }
}
</script>

<style scoped>
h1{
  font-size:20px;
  font-weight: normal;
}
</style>

1.3  v-else-if

顾名思义,充当 v-if 的“else-if 块”,类似于 v-elsev-else-if 也必须紧跟在带 v-if 或者 v-else-if 的元素之后, 可以连续使用:

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>

1.4 v-show指令

语法:v-show=' 表达式 '

当v-show表达式的值为false时,元素会隐藏,查看DOM元素结构会发现元素上加载了display:none 属性。

示例代码:

<template>
  <div class="hello">
    <h1 v-show="status == 1">当status为1时显示改行内容</h1>

  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      status:2
    }
  }
}
</script>

<style scoped>
h1{
  font-size:20px;
  font-weight: normal;
}
</style>

小结:v-if与v-show的区别

  • v-show只是简单地通过display的属性值进行切换,而v-if表达式为false时则直接销毁,不会渲染到页面元素中。
  • v-if更适合条件不经常改变的场景,因为v-if指令有更高的切换消耗,而v-show指令有更高的初始渲染销毁;如果需要频繁切换,使用v-show较好。

二、列表渲染v-for指令

语法:

v-for = '(item,index) in items'

  • item 表示每次遍历得到的元素
  • index表示item的索引,为可选参数
  • items表示数组或者对象

2.1 遍历对象

示例代码:

<template>
  <div class="hello">
    <ul>
      <li v-for="(value,key,index) in person" :key="index">
        {{index}}-{{key}}-{{value}}
      </li>
    </ul>

  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      person:{
        name:"小暖",
        age:20
      }
    }
  }
}
</script>

<style scoped>
h1{
  font-size:20px;
  font-weight: normal;
}
</style>

2.2 遍历数组

示例代码:

<template>
  <div class="hello">
    <ul>
      <li v-for="(item,index) in lesson" :key="index">
        {{index}}-{{item.name}}-{{item.type}}
      </li>
    </ul>

  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      lesson:[
        {name:'前端三大块',type:['HTML','CSS','Javascript']},
        {name:'前端三大框架',type:['vue.js','react','angularjs']},
      ]
    }
  }
}
</script>

<style scoped>
h1{
  font-size:20px;
  font-weight: normal;
}
</style>

 注意:尽可能在使用v-for指令时,提供key属性(:key="index"),除非遍历输出的DOM内容非常简单。

三、方法与事件

3.1 v-on 指令

v-on 指令为HTML元素绑定监听事件,类似JavaScript的onclick事件。

语法:

v-on:事件名称='函数名称( )'

示例代码(事件方法不带参数):

<template>
  <div class="hello">
    <!-- 没有参数时,方法后面的括号可以省略 -->
    <!-- <button v-on:click='fn()'>toggle</button> -->
    <!-- <button v-on:click='fn'>toggle</button> -->
    <button @click='fn'>toggle</button>
    <div v-show="bol" class="box"></div>

  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      bol:false
    }
  },
  methods:{
    fn:function(){
      this.bol=!this.bol;
    }
  }
}
</script>

<style scoped>
.hello{
  width:100px;
  height: 100px;
  margin:10px auto;
}
.box{
  width:100px;
  height: 100px;
  background:red;
  margin:10px auto;
}
</style>

示例代码(事件方法带参数):

<template>
  <div class="hello">
    <!-- <button v-on:click="say('Hello')">Hello</button> -->
    <button @click="say('Hello')">Hello</button>


  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      bol:false
    }
  },
  methods:{
    say:function(msg){
      alert(msg);
    }
  }
}
</script>

<style scoped>
.hello{
  width:100px;
  height: 100px;
  margin:10px auto;
}
.box{
  width:100px;
  height: 100px;
  background:red;
  margin:10px auto;
}
</style>

3.2 事件修饰符

v-on后面还可以增加修饰符,即在@绑定的事件后加小圆点“.”再跟一个后缀,Vue中常用的修饰符如下:

  • .stop:调用event.stopPropagation()。
  • .self: 当事件是从侦听器绑定的元素本身触发时才触发回调。
  • .prevent : 调用 event.preventDefault()。

冒泡事件发生的效果代码1:

<template>
  <div class="hello">
    <div class="div-par" @click="parent">
      parent
      <div class="div-chil" @click="child">
        child
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data (){
    return{
      
    }
  },
  methods:{
    parent:function(){
      alert("parent");
    },
    child:function(){
      alert("child");
    }
  }
}
</script>

<style scoped>
.div-par{
  width:100px;
  height: 100px;
  border: 1px solid #333;
  margin:20px auto;
  color:#333;
}
.div-chil{
  width:50px;
  height: 50px;
  border:1px solid #333;
  margin:10px 25px;
}
</style>

冒泡事件:当单击child盒子时,网页会连续弹出来两个弹窗,child身上的点击事件触发了父盒子div身上的点击事件,也称为冒泡行为。我们可以利用修饰符解决这个问题,让父盒子不触发点击事件。

第一种方式(给子盒子加.stop修饰符):<div class="div-chil" @click.stop="child">

第二种方式(给父盒子加.self修饰符):<div class="div-par" @click.self="parent">

a链接的点击弹窗并页面跳转的代码:

<template>
  <div>
    <a href="http://www.baidu.com" @click="showInfo">点我提示信息</a>
  </div>
</template>

<script>
export default {
  name:"HelloWorld",
  data(){

  },
  methods:{
    showInfo:function(){
      alert('你好呀,同学!')
    }
  }

}
</script>

<style>

</style>

阻止标签默认行为事件:当我单击a链接后,页面会弹窗,然后会跳转到百度网页,我不想让其跳转页面,该如何解决?我们可以利用修饰符解决这个问题:

给a链接加一个.prevent修饰符:

<a href="http://www.baidu.com" @click.prevent="showInfo">点我提示信息</a>

四、v-model与表单

v-model 指令在表单 <input><textarea><select> 元素上创建双向数据绑定。

示例代码:

<template>
  <div>
    <input type="text" v-model="msg">
    <h1>{{msg}}</h1>  
  </div>
</template>

<script>
export default {
  name:"HelloWorld",
  data(){
    return{
      msg:"Hello"
    }
  }
}
</script>
<style>
</style>

v-model的三个修饰符:

  • lazy:失去焦点再收集数据。
  • number:输入字符串转为有效的数字。
  • trim:输入首尾空格过滤。

v-model在表单应用的实例代码:

<template>
  <div>
   <form>
     账号:<input type="text" v-model.trim="account"> <br/><br/>
     密码:<input type="password" v-model="password"> <br/><br/>
     年龄:<input type="number" v-model.number="age"> <br/><br/>
      性别:
      男<input type="radio" name="sex" v-model="sex" value="male">
      女<input type="radio" name="sex" v-model="sex" value="female"> <br/><br/>
      爱好:        
       学习<input type="checkbox" v-model="hobby" value="study">
       打游戏<input type="checkbox" v-model="hobby" value="game">
       吃饭<input type="checkbox" v-model="hobby" value="eat">
        <br/><br/>
       所属校区
      <select v-model="city">
        <option value="">请选择校区</option>
        <option value="beijing">北京</option>
        <option value="shanghai">上海</option>
        <option value="shenzhen">深圳</option>
        <option value="wuhan">武汉</option>
      </select>
       <br/><br/>
      其他信息:
      <textarea v-model.lazy="other"></textarea> <br/><br/>       
      <input type="checkbox" v-model="agree">阅读并接受<a href="http://www.atguigu.com">《用户协议》</a>
      <button>提交</button>                  
   </form>
  </div>
</template>

<script>
export default {
  name:"HelloWorld",
  data(){
    return{
      account:'',
	  password:'',
	  age:18,
	  sex:'female',
	  hobby:[],
	  city:'beijing',
	  other:'',
	  agree:''
    }   

  }
}
</script>

<style>

</style>

vimodel收集表单数据小结:

     若:<input type="text"/>,则v-model收集的是value值,用户输入的就是value值。

     若:<input type="radio"/>,则v-model收集的是value值,且要给标签配置value值。

     若:<input type="checkbox"/>

        1.没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)

        2.配置input的value属性:

                  (1)v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)。

                  (2)v-model的初始值是数组,那么收集的的就是value组成的数组。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是对你提出的前端Vue面试题的回答: 1. Vue.js是一款流行的JavaScript框架,用于构建用户界面。Vue.js的特点是简单易学、灵活性强、性能高、可组合性好等。 2. Vue.js的双向数据绑定是通过使用数据劫持和发布/订阅模式实现的。当数据发生变化时,Vue.js会自动更新视图,反之亦然。 3. Vue.js中的生命周期钩子函数有8个,分别是beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。它们分别在不同的时刻被调用,用于执行一些特定的操作。 4. Vue组件是Vue.js应用程序中的可重用代码块。通过定义一个Vue组件,可以将其作为一个独立的模块来使用。Vue组件通常包括模板、样式和逻辑等内容。 5. Vue.js中的指令是一种用于向DOM元素添加特殊行为的语法。常用的指令v-if、v-show、v-for、v-bind和v-on等等。 6. Vue.js中的路由是用于管理Vue应用程序中页面之间导航的方式。可以通过Vue Router插件来实现路由功能。 7. Vue.js中的过滤器是一种用于格式化文本的功能。可以通过定义一个过滤器来将数据进行格式化并渲染到HTML中。 8. Vue.js中的计算属性是一种用于动态计算Vue组件的属性值的方式,与方法不同的是,计算属性具有缓存和依赖检测的特点。 9. 在Vue.js中,可以通过Vue.directive()方法来定义自定义指令。自定义指令通常用于扩展Vue.js的功能。 10. Vue.js的单文件组件是一种将模板、样式和逻辑封装在一个文件中的方式,以便于组件的管理和维护。可以通过Vue CLI工具来创建和使用单文件组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wanglingli95

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值