Vue--day01

00-ES6补充

01-块级作用域

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

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


<script>
  //ES5中的var是没有块级作用域的(if/for)
  //ES6中的let是有块级作用域的(if/for)

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

  var name='why'
  function abc(bbb) {// bbb='why
    console.log(bbb);
  }
  abc(name)
  name='kobe'

  // 3.没有块级作用域引起的问题:for的块级
  // 为什么闭包可以解决问题:函数是一个作用域,
// var btns=document.getElementsByTagName('button');
//   for(var i=0;i<btns.length;i++){
//     (function (num) {// 0
//       btns[i].addEventListener('click',function () {
//         console.log('第'+num+'个按钮被点击');
//       })
//     })(i)
//   }

  const btns=document.getElementsByTagName('button')
  for(let i=0;i<btns.length;i++){
    btns[i].addEventListener('click',function () {
      console.log('第'+i+'个按钮被点击');
    })
  }
</script>

</body>
</html>

02-const的使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

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


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

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

  obj.name='kobe';
  obj.age=40;
  obj.height=1.87;

  console.log(obj);
</script>
</body>
</html>

03-对象字面量的增强写法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<script>
  // const obj=new Object()

  // const obj={
  //   name:'why',
  //   age:18,
  //   run:function () {
  //     console.log('在奔跑');
  //   },
  //   eat:function () {
  //     console.log('在次东西');
  //   }
  // }

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

  //ES5的写法
  // const obj={
  //   name:name,
  //   age:age,
  //   height:height
  // }

  // const  obj={
  //   name,
  //   age,
  //   height
  // }
  //
  // console.log(obj);

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

    },
    eat(){

    }
  }
</script>

</body>
</html>

01-Vue初体验

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

01-HelloVuejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    <h1>{{message}}</h1>
    <h2>{{name}}</h2>

</div>

<div>{{message}}</div>

<script src="../js/vue.js"></script>
<script>
// //let(变量)/const(常量)
    // 编程范式:声明式编程
    const app=new Vue({
        el:'#app',//  用于挂载要管理的元素
        data:{//  定义数据
                message:'你好啊,李银河!',
                name:'ahhhh'
        }

    })

    //  元素js的做法(编程范式:命令式编程)
    //  1.创建div元素,设置id属性

    //  2.定义额一个变量交message

    //  3.将message变量放在前面的div元素中显示

    //  4.修改message的数据:今天天气不错!

    //  5.将修改后的数据再次替换到div元素
</script>




</body>
</html>

02-Vue列表展示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
  <ul>
      <li v-for="item in movies">{{item}}</li>
  </ul>
</div>

<script src="../js/vue.js"></script>
<script>
    const app=new Vue({
        el:'#app',
        data:{
            message:'你好啊',
            movies:['星际穿越','大话西游','少年派','盗梦空间']
        }
    })
</script>

</body>
</html>

03-Vue案例-计数器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    <h2>当前计数: {{counter}}</h2>
<!--    <button v-on:click="counter++">+</button>-->
<!--    <button v-on:click="counter--">-</button>-->
    <button v-on:click="add">+</button>
    <button @click="sub">-</button>
</div>

<script src="../js/vue.js"></script>
<script>
    // 语法糖 :简写(v-on: -> @)
    // proxy
    const obj={
        counter:0,
        message:'abc'
    }
    const app=new Vue({
        el:'#app',
        data:obj,
        methods:{
            add:function (){
                console.log('add被执行');
                this.counter++
            },
            sub:function (){
                console.log('sub被执行');
                this.counter--
            }
        },
        beforeCreate:function () {

        },
        created:function () {
            console.log('created');
        },
        mounted:function () {
            console.log('nounted');
        }
    })


    // 1.拿button元素

    // 2.添加监听事件
</script>

</body>
</html>

04-Vue的template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  {{message}}
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    }
  })
</script>

</body>
</html>

02-插值的操作

01-Mustache语法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<<div id="app">
  <h2>{{message}}</h2>
  <h2>{{message}},李银河!</h2>
<!--
mustache语法中,不仅仅可以直接写变量,也可以写简单的表达式
mustache语法只能使用在content内容文本中,不能写在标签属性中
-->
  <h2>{{firstName+lastName}}</h2>
  <h2>{{firstName+' '+lastName}}</h2>
  <h2>{{firstName}} {{lastName}}</h2>
  <h2>{{counter*2}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      firstName:'kobe',
      lastName:'bryant',
      counter:100
    }
  })
</script>

</body>
</html>

02-v-once指令的使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<<div id="app">
  <h2>{{message}}</h2>
<!--  使用v-once之后,该h2中内容不会随着message数据的改变而改变-->
  <h2 v-once>{{message}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    }
  })
</script>

</body>
</html>

03-v-html指令的使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <h2>{{url}}</h2>
<!--  使用v-html时,后面的string中往往会含有html标签,通过v-html将该string的html解析出来-->
  <h2 v-html="url"></h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      url:'<a href="http://www.baidu.com">百度一下</a>'
    }
  })
</script>

</body>
</html>

04-v-text指令的使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<<div id="app">
  <h2>{{message}},李银河!</h2>
<!--  使用v-text效果和{{}}一样,但是不够灵活,若h2标签中还有文字,message中的文字会将其覆盖-->
  <h2 v-text="message">,李银河!</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    }
  })
</script>

</body>
</html>

05-v-pre指令的使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <h2>{{message}}</h2>
<!--  使用v-pre时,可以将标签中的内容原封不动的显示出来,而不做任何解析-->
  <h2 v-pre>{{message}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    }
  })
</script>

</body>
</html>

06-v-cloak指令的使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>

<div id="app" v-cloak>
  {{message}}
</div>

<script src="../js/vue.js"></script>
<script>
  // 在vue解析之前,div中有一个属性v-cloak
  // 在vue解析之后,div中没有一个属性v-cloak
  setTimeout(function () {
    const app = new Vue({
      el: '#app',
      data: {
        message: '你好啊'
      }
    })
  },1000)

</script>

</body>
</html>

03-动态绑定属性

在这里插入图片描述

01-v-bind的基本使用

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
<!--  错误的做法:这里不可以使用mustache语法-->
<!--  <img src="{{imgURL}}" alt="">-->
<!--  正确的做法:使用v-bind指令-->
  <img v-bind:src="imgURL" alt="">
  <a v-bind:href="aHref">百度一下</a>
<!--  <h2>{{}}</h2>-->

<!--  语法糖的写法-->
  <img :src="imgURL" alt="">
  <a :href="aHref">百度一下</a>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      imgURL:'https://img12.360buyimg.com/pop/s590x470_jfs/t1/158445/24/22770/89909/61c06457E2c49610a/128d3d2dda8b1bfa.jpg.webp',
      aHref:'http://www.baidu.com'
    }
  })
</script>

</body>
</html>

在这里插入图片描述

02-v-bind动态绑定class(对象语法)

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .active{
      color: red;
    }
  </style>
</head>
<body>

<div id="app">
<!--  <h2 class="active">{{message}}</h2>-->
<!--  <h2 :class="active">{{message}}</h2>-->

<!--  <h2 v-bind:class="{key1:value1,key2:value2}">{{message}}</h2>-->
<!--  <h2 v-bind:class="{类名1:true,类名二:boolean}">{{message}}</h2>-->
  <h2 class="title" v-bind:class="{active:isActive,line:isLine}">{{message}}</h2>
  <h2 class="title" v-bind:class="getClasses()">{{message}}</h2>
  <button v-on:click="btnClick">按钮</button>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      isActive:true,
      isLine:true
    },
    methods:{
      btnClick:function () {
        this.isActive=!this.isActive
      },
      getClasses:function () {
        return {active:this.isActive,line:this.isLine}
      }
    }
  })
</script>

</body>
</html>

03-v-bind动态绑定class(数组语法)

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <h2 class="title" :class="[active,line]">{{message}}</h2>
  <h2 class="title" :class="getClass()">{{message}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      active:'aaaaaa',
      line:'bbbbbb'
    },
    methods:{
      getClass:function () {
        return [this.active,this.line]
      }
    }
  })
</script>

</body>
</html>

在这里插入图片描述

在这里插入图片描述

04-v-bind动态绑定style(对象语法)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
<!--  <h2 :style="{key(属性名):value(属性值)}">{{message}}</h2>-->

<!--  '50px'必须加上单引号,否则是当作一个变量去解析-->
<!--  <h2 :style="{fontSize:'50px'}">{{message}}</h2>-->

<!--  finalSize当成一个变量使用-->
<!--  <h2 :style="{fontSize:finalSize}">{{message}}</h2>-->
  <h2 :style="{fontSize:finalSize+'px',backgroundColor:finalColor}">{{message}}</h2>
  <h2 :style="getStyles()">{{message}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      finalSize:100,
      finalColor:'red',
    },
    methods:{
      getStyles:function () {
        return {fontSize:this.finalSize+'px',backgroundColor:this.finalColor}
      }
    }
  })
</script>

</body>
</html>

05-v-bind动态绑定style(数组语法)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title></title>
</head>
<body>

<div id="app">
  <h2 :style="[baseStyle,baseStyle1]">{{message}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊',
      baseStyle:{backgroundColor:'red'},
      baseStyle1:{fontSize:'100px'}
    }
  })
</script>

</body>
</html>

在这里插入图片描述
在这里插入图片描述

04-计算属性

在这里插入图片描述

01-计算属性的基本使用

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <h2>{{firstName+' '+lastName}}</h2>
  <h2>{{firstName}} {{lastName}}</h2>

  <h2>{{getFullName()}}</h2>

  <h2>{{fullName}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      firstName:'Lebron',
      lastName:'James'
    },
    // computed:计算属性()
    computed:{
      fullName:function () {
        return this.firstName+' '+this.lastName
      }
    },
    methods:{getFullName() {
        return this.firstName + ' ' + this.lastName
      }
  }
  })
</script>

</body>
</html>

02-计算属性的复杂操作

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <h2>总价格:{{totalPrice}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      books:[
        {id:110,name:'Unix编程艺术',price:119},
        {id:111,name:'代码大全',price:105},
        {id:112,name:'深入理解计算机原理',price:98},
        {id:113,name:'现代操作系统',price:87},
      ]
    },
    computed:{
      totalPrice:function (){
        let result=0
        for(let i=0;i<this.books.length;i++){
          result+=this.books[i].price
        }
        return result

        // for(let i in this.books){
        //   this.books[i]
        // }
        //
        // for(let book of this.books){
        //
        // }
      }
    }
  })
</script>

</body>
</html>

03-计算属性的getter和setter

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
  <h2>{{fullName}}</h2>
</div>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      firstName:'Kobe',
      lastName:'Bryant'
    },
    computed:{
      // fullName:function () {
      //   return this.firstName+' '+this.lastName
      // }
      // name:'coderwhy'
      // 计算属性一般是没有set方法,只读属性;
      fullName:{
        set:function (newValue) {
          console.log('------',newValue);
          const names=newValue.split(' ');
          this.firstName=names[0];
          this.lastName=names[1];
        },
        get:function () {
          return this.firstName+' '+this.lastName
        }
      }

      // fullName:function () {
      //   return this.firstName+' '+this.lastName
      // }
    }
  })
</script>

</body>
</html>

04-计算属性和methods的对比

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<div id="app">
<!--  1.直接拼接:语法过于繁琐-->
<!--  <h2>{{firstName}} {{lastName}}</h2>-->
<!--  2.通过定义methods-->
  <h2>{{getFullName()}}</h2>

  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>
  <h2>{{getFullName()}}</h2>

<!--  3.通过computed-->
<!--  <h2>{{fullName}}</h2>-->

<!--  <h2>{{fullName}}</h2>-->
<!--  <h2>{{fullName}}</h2>-->
<!--  <h2>{{fullName}}</h2>-->
<!--  <h2>{{fullName}}</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>

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值