学习Vue.js Day03

229 阅读3分钟

const 的使用

ES6中优先使用const,只有需要改变某一个标识符时才用let

注意1:const定义的是常量,不能修改,且必须进行赋值

注意2:常量定义的对象不能改变,但是可以改变对象的内部属性

<script>
  const obj ={
    name: 'why',
    age: 18,
    sex: 'man',
  }
  console.log(obj.age)//结果为18
  obj.age = 20
  console.log(obj.age)//结果为20
  const app = new Vue({
    el:'#app',
    data:{

    }
  })
</script>

事件监听 v-on 语法糖 @

参数问题

  • 事件调用不需要参数的函数是可以省略小括号
  <button @click="add">按钮1</button>
  <button @click="sub">按钮2</button>

写函数时省略了小括号,但是方法本身是需要一个参数的时候,这个时候Vue会默认将浏览器生成的event事件对象作为参数传入方法中

写函数时没有传递参数,但是方法本身需要一个参数时,则会提示undefind

写函数式传递两个参数时,且需要传递event事件对象时

  • 当没有传递参数时,第一个参数为event事件,第二个则为undefinded
  • 正确的写法,$event固定的写法!,数字不需要单引号,字符串需要单引号,如果不加单引号字符串则被当成一个变量
    <button @click="btnClick4('abc',$event)">按钮4</button>

如何阻止事件冒泡 .stop

<div id="app">
  <div @click="divClick">
    <button @click="btnClick">按钮</button>
  </div>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{

    },
    methods:{
      divClick(){
        console.log('div被点击了')
      },
      btnClick(){
        console.log('btn被点击了');
      },
    },
  })
</script>
<div id="app">
  <div @click="divClick">
    <button @click.stop="btnClick">按钮</button>
  </div>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{

    },
    methods:{
      divClick(){
        console.log('div被点击了')
      },
      btnClick(){
        console.log('btn被点击了');
      },
    },
  })
</script>

阻止默认事件 .prevent

如表单默认提交时,阻止它,由自己交提交

    <form action="baudi">
        <input type="submit" value="提交"  @click.prevent="submitClick">
    </form>
    const app = new Vue({
    el:'#app',
    data:{

    },
    methods:{
      submitClick(){
        console.log('哎我想自己交');
      }
    },
  })

监听某个键盘的键的点击 @keyup

<input type="text" @keyup.enter="KeyUp">

监听自定义组件 .native

<cpn @click.native="cpnClick"></cpn>

方法只触发一次 .once

<button @click.once="btnClick">按钮6</button>

条件判断 v-if v-else-if v-else

如果逻辑判断比较复杂其实使用computed(计算属性)更好!

  <h2 v-if="show">{{message}}</h2>
  <h2 v-else>看不见我</h2>
  <h2 v-if="score>90">优秀</h2>
  <h2 v-else-if="score>80">良好</h2>
  <h2 v-else="score>60">及格</h2>
  <script>
  const app = new Vue({
    el:'#app',
    data:{
      message:'看到我了',
      show:true,
      score:90,
    },
)}

Vue在进行DOM渲染时,出于对性能的考虑会先抽象为虚拟DOM放到内存中,会尽可能的复用已经存在的元素,而不是重新创建新的元素。 因此有些时候原来的input元素会在else中继续使用

解决办法:给input加key且key要不同

<div id="app">
  <form action="#">
    <span v-if="type">
      <label for="username">账号</label>
      <input type="text" value="" id="username" key="usename" placeholder="请输入你的账号">
      <button @click.prevent="changeType">账号登录</button>
    </span>
    <span v-else>
      <label for="email">邮箱</label>
      <input type="email" id="email" value="" key="email" placeholder="请输入你的邮箱">
      <button @click.prevent="changeType">邮箱登录</button>
    </span>

  </form>
</div>
<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el:'#app',
    data:{
      type: true
    },
    methods:{
      changeType(){
        this.type = !this.type
      },
    },
  })
</script>