学习Vuejs-Day2

1.计算属性里面有set方法和get方法

注:计算属性一般是没有set方法, 只读属性

<body>
    <div id="app">
     <h2>{{fullName}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊',
          firstName: 'kobe',
          lastName: 'Bryant'
        },
        computed: {
          fullName: {
            //如果需要设置fullName,可以有set方法,99%不写,省略掉set
            set: function (newValue) {
                console.log('-----');
                const names = newValue.split(' ');
                this.firstName = names[0];
                this.lastName = names[1];
            },
            get() {
              return this.firstName + ' ' + this.lastName;
            }
          }
        },
      });
    </script>
</body>

2.计算属性和methods的对比

1. 遇到n次使用,在fullName没有发生变化的条件下,计算属性只调用一次,建议使用计算属性,计算属性有缓存。
2. 遇到n次使用,methods(方法)调用n次

比较代码:

 <div id="app">
      <!-- 遇到n次使用,在fullName没有发生变化的条件下,计算属性只调用一次 -->
     <h2>{{fullName}}</h2>
     <h2>{{fullName}}</h2>
     <h2>{{fullName}}</h2>
     <h2>{{fullName}}</h2>

     <!-- 遇到n次使用,methods(方法)调用n次 -->
     <h2>{{getFullName()}}</h2>
     <h2>{{getFullName()}}</h2>
     <h2>{{getFullName()}}</h2>
     <h2>{{getFullName()}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          firstName: 'kobe',
          lastName: 'Bryant'
        },
        methods: {
          getFullName: function () {
            console.log('getFullName');
            return this.firstName + ' ' + this.lastName
          }
        },
        computed: {
          fullName: function () {
            console.log('fullName');
            return this.firstName + ' ' + this.lastName
          }
        }
        
      });
    </script>

3.ES6的补充

1.块级作用域

ES5之前因为if和for都没有块级作用域的概念,所以在很多时候,我们都必须借助于function的作用域来解决应用外面变量的问题,ES6中,加入了let,let它是有if和for的块级作用域

 <body>
  
  <button>按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
  <button>按钮4</button>
  <button>按钮5</button>  

  <script>
    // ES5之前因为if和for都没有块级作用域的概念,所以在很多时候,我们都必须借助于function的作用域
    // 来解决应用外面变量的问题
    // ES6中,加入了let,let它是有if和for的块级作用域
    
    // 2.没有块级作用域引起的问题: if的块级
    // var func;
    // if (true) {
    //   var name = 'why';
    //   func = function () {
    //     console.log(name);
    //   }
    // }
    // name = 'kobe'
    // func (); //想让name显示为 why,可是name的值发生了变化

    // 3.没有块级作用域引起的问题: for的块级
    // 想要的效果是:点击哪个按钮,显示哪个按钮被点击
    var btns = document.getElementsByTagName('button');
    //for (var i=0; i<btns.length; i++){
      // btns[i].addEventListener('click', function(){
      //   console.log('第' + i + '个按钮被点击');
      // }) 
      //可以解决的方法:1.用闭包
      // (function (i) {
      //   btns[i].addEventListener('click', function(){
      //     console.log('第' + i + '个按钮被点击');
      //   }) 
      // })(i)
      //可以解决的方法:2.用ES6的let
      for(let i = 0; i<btns.length; i++){
        btns[i].addEventListener('click', function(){
         console.log('第' + i + '个按钮被点击');
        })
      }
      
   // }
  </script>
</body>

2.const的使用

注意一:一旦给const修饰的标识符被赋值之后,不能修改
注意二:在使用const定义标识符,必须进行赋值
注意三:常量的含义是指向的对象不能修改,但是可以改变对象内部的属性

<body>
  <script>
    // 1.注意一:一旦给const修饰的标识符被赋值之后,不能修改
    // const name = 'why';
    // name = 'kebo'; 发生错误

    // 2.注意二:在使用const定义标识符,必须进行赋值
    // const name = ‘kebo’;

    // 3.注意三:常量的含义是指向的对象不能修改,但是可以改变对象内部的属性
    const obj = {
      name: 'why',
      age: 18,
      height: 1.88
    }
    console.log(obj);

    obj.name = 'kobe';
    obj.age = 40;
    obj.height = 1.87;
    
    console.log(obj);
  </script>
</body>

3.对象字面量的增强写法

 <script>
    // 1.属性的增强写法
    const name = 'why';
    const age = 18;
    const height = 1.88

    // ES5的写法
    // const obj = {
    //   // 键:值
    //   name: name,
    //   age: age,
    //   height: height
    // }
 
    // ES6的写法:更加简便
    // const obj = {
    //   name,
    //   age,
    //   height
    // }    
    // console.log(obj);

    // 2.函数的增强写法
    // ES5的写法
    // const obj = {
    //   run: function () {

    //   },
    //   eat: function (){

    //   }
    // }

    // ES6的写法:省略了function,更加简单
    const obj = {
      run() {

      },
      eat() {

      }
    }
  </script>

4.v-on的基本使用

1 . v-on事件监听,v-on的语法糖(就是可以简写成@,例如v-on:click可以简写成@click

    <div id="app" v-cloak>
     <h2>{{counter}}</h2>
     <!-- 
       <button v-on:click = "increment">+</button>
       <button v-on:click = "decrement">-</button> 
     -->
     <!-- v-on:的语法糖(简写)模式为@ -->
     <button @click = "increment">+</button>
     <button @click = "decrement">-</button>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          counter: 0
        },
        methods: {
          increment() {
            this.counter++
          },
          decrement() {
            this.counter--
          }
        }
      });
    </script>

2 .v-on的参数问题

  1. 在监听事件中,如果不需要参数,可以省略了小括号
  2. 在事件定义时,写方法时省略了小括号,但是方法本身是需要一个参数时,这个时候,Vue会默认将浏览器生产的event事件对象作为参数传入到方法
  3. 方法定义时,如果需要event对象,写成$event,又需要其他参数
<body>
    <div id="app">
   
     <!--1.在监听事件中,如果不需要参数,可以省略了小括号  -->
     <button @click="btn1Click">按钮1</button>

     <!--2.在事件定义时,写方法时省略了小括号,但是方法本身是需要一个参数时,这个时候,Vue会默认
      将浏览器生产的event事件对象作为参数传入到方法  -->
     <button @click="btn2Click">按钮2</button>

     <!-- 方法定义时,如果需要event对象,写成$event,又需要其他参数 -->
     <button @click="btn3Click(123,$event)">按钮3</button>
    
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊'
        },
        methods: {
          btn1Click(){
            console.log("btn1Click");
          },
          btn2Click(event){
            console.log(event);
          },
          btn3Click(abc,event){
            console.log(abc,event);
          }
        }
      });
    </script>
</body>

3 .v-on的修饰符
<1>.stop修饰符的使用:停止冒泡
<2>.prevent修饰符的使用:阻止默认行为
<3>监听某个键盘的键帽
<4>.once修饰符的使用:点击回调只会触发一次

<body>
    <div id="app">
      <!-- 1. .stop修饰符的使用:停止冒泡-->
      <div @click="divClick">
        aaa
        <button @click.stop="btnClick">按钮</button>
      </div>

      <br>
      <!-- 2. .prevent修饰符的使用:阻止默认行为 -->
      <form action="baidu">
        <input type="submit" value="提交" @click.prevent="submitClick">
      </form>

      <br>
      <!-- 3.监听某个键盘的键帽 :下面是只监听回车键-->
      <input type="text" @keyup.enter="keyUp"> 

      <br>
      <!-- 4. .once修饰符的使用:点击回调只会触发一次 -->
      <button @click.once="but2Click">按钮2</button>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊'
        },
        methods: {
          divClick() {
            console.log("divClick");
          },
          btnClick() {
            console.log("btnClick");
          },
          submitClick() {
            console.log("sumbitClick");
          },
          keyUp() {
            console.log("keyUp");
          },
          but2Click() {
            console.log("but2Click");
          }
        }
      });
    </script>
</body>

5.条件判断

1.v-if 的使用

    <div id="app">
     <h2 v-if="isShow">{{message}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊',
          isShow: true
        },
          methods: {}
      });
    </script>

2.v-if 和 v-else的使用

<body>
  <div id="app">
    <h2 v-if="isShow">
      <div>abc</div>
      <div>abc</div>
      <div>abc</div>
      <div>abc</div>
      <div>abc</div>
      {{message}}
    </h2>
    <h2 v-else>isShow为false时,显示我</h2>
   </div>
   <script src="../js/vue.js"></script>
   <script>
     const app = new Vue({
       el: '#app',
       data: {
         message: '你好啊',
         isShow: true
       },
         methods: {}
     });
   </script>
</body>

3.v-if 和 v-else-if 和 v-else 的使用

     <p v-if="score>=90">优秀</p>
     <p v-else-if="score>=80">良好</p>
     <p v-else-if="score>=60">及格</p>
     <p v-else>不及格</p> 

4.v-show 的使用
注意:v-if:当条件为false时,包含v-if指令的元素,根本不会存在dom中 ,v-if在实际开发中使用的多;v-show:当条件为false时,v-show只是给我们的元素添加一个行内样式:display:none

<body>
    <div id="app">
     <!-- v-if:当条件为false时,包含v-if指令的元素,根本不会存在dom中 ,v-if在实际开发中使用的多-->
     <h2 v-if="isShow" id="aaa">{{message}}</h2>

     <!-- v-show:当条件为false时,v-show只是给我们的元素添加一个行内样式:display:none -->
     <h2 v-show="isShow" id="bbb">{{message}}</h2>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊',
          isShow: true
        },
        methods: {}
      });
    </script>
</body>

6.用户登录的案例

<body>
    <div id="app">
     <span v-if="isUser">
       <label for="username">用户账号</label>
       <input type="text" id="username" placeholder="用户账号" key="username">
     </span>
     <span v-else>
      <label for="eamil">用户邮箱</label>
      <input type="text" id="eamil" placeholder="用户邮箱" key="eamil">
     </span>
     <button @click="isUser = !isUser">切换类型</button>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          message: '你好啊',
          isUser: true
        },
        methods: {}
      });
    </script>
</body>

7.循环遍历

1.v-for遍历数组

<body>
    <div id="app">
     <!-- 1.在遍历的过程中,没有使用索引值(下标值) -->
     <ul>
       <li v-for="item in names"> {{item}}</li>    
     </ul>

     <!-- 2.在遍历的过程中,获取索引值 -->
     <ul>
      <li v-for="(item,index) in names">
        {{index+1}}.{{item}}
       </li>
     </ul>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          names: ['why','kobe','james','curry']
        },
        methods: {}
      });
    </script>
</body>

2.v-for遍历对象

<body>
    <div id="app">
    <!-- 最原始的方法<li多的话,这种方法不切实际> -->
      <ul>
        <li>{{info.name}}</li>
        <li>{{info.age}}</li>
        <li>{{info.heigth}}</li>
      </ul>

     <!-- 1.在遍历对象的过程中,如果只是获取一个值,那么获取到的是value,不是键 -->
     <ul>
       <li v-for="item in info">{{item}}</li>
     </ul>

      <!-- 2.获取value和key,格式为:(value,key) -->
      <ul>
        <li v-for="(value,key) in info">{{value}}-{{key}}</li>
      </ul>

      <!-- 3.获得索引<不常用>,格式为:(value,key,index) -->
      <ul>
        <li v-for="(value,key,index) in info">{{value}}-{{key}}-{{index}}</li>
      </ul>

    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          info:{
            name: 'why',
            age:18,
            heigth:1.88
          }
        },
        methods: {}
      });
    </script>
</body>

3.v-for使用过程添加key

添加key的目的是提高更新虚拟dom

<body>
    <div id="app">
     <!-- 添加key的目的是提高更新虚拟dom -->
     <ul>
       <li v-for="item in letters" :key="item">{{item}}</li>
     </ul>
    </div>
    <script src="../js/vue.js"></script>
    <script>
      const app = new Vue({
        el: '#app',
        data: {
          letters: ['A','B','C','D','E']
        },
        methods: {}
      });
    </script>
</body>

8.哪些数组的方法是响应式的

  1. push()方法:在最后添加若干个元素

  2. pop()方法:删除数组的最后一个元素

  3. shift():删除数组中的第一个元素

  4. unshift():在数组最前面添加元素

  5. splice()作用:可以删除元素/插入元素/替换元素 (用的比较多)
    1.删除元素:第二个元素传入你要删除几个元素(如果没有传,就删除后面所有的元素)
    this.letters.splice(1,2)
    2.替换元素:第二个元素,表示要替换几个元素,后面是用于替换前面的元素
    this.letters.splice(1,2,‘ddd’,‘ggg’,‘xxx’)
    3.插入元素:第二个元素为0,后面跟上要插入的元素
    this.letters.splice(1,0,‘插入一个’,‘插入二个’)

  6. sort():数组排序

  7. reverse():翻转

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值