微信小程序--vue.js学习

这周还是没新项目,所以开始学习我认为挺重要的vue.js,目前为止主要是学习了一点基础

vue介绍

vuei(读音/vju:/,类似于view)

Vue是一个渐进式的框架,什么是渐进式的呢?

渐进式意味着你可以将Vue作为你应用的一部分嵌入其中,带来更丰富的交互体验。
或者如果你希望将更多的业务逻辑使用Vue实现,那么可以使用Vue的核心库以及其生态系统。
比如Core+Vue-router+Vuex,也可以满足你各种各样的需求。

Vue有很多特点和Web开发中常见的高级功能
  • 解耦视图和数据
  • 可复用的组件
  • 前端路由技术
  • 状态管理
  • 虚拟DOM
学习Vuejs的前提?

从零学习Vue开发,并不需要具备其他类似于Angular、React,甚至是jQuery的经验。
但是需要具备—定的HTML.css.JavaScript甚础。

vue安装

安装Vue的方式三种

方式一︰直接CDN引入

分为开发环境版本和生产环境版本,一般在项目开发时使用开发环境版本,会提示警告,而在发布项目改为生产环境版本可以优化速度。
开发环境版本

<script src="https : //cdn.jsdelivr.net/npm/vue/dist/vue.js""></script>

生产环境版本

<script src="https : /lcdn.jsdelivr.net/npm/vue"></script>
方式二∶下载和引入

在Vue.js的官网上直接下载vue.js,并在.html中通过

<script src = ../vue.js> </script>

1.引入vue.js
2.创建一个vue根实例 new Vue

<script>
    const app = new Vue({
        el:'#app',   //用于挂载要管理的元素
        data:{       //定义数据
            message:'你好啊',       
        }
    })
</script>
方式三:NPM安装

暂时还没了解,后续再进行学习

vue学习

这周主要学习了以下内容

1.vue初体验
  • 1.1 Hello vuejs(mustache语法体验vue的响应式)
  • vue列表
    • 1.2 v-for
    • 给数值增加元素时,新增的元素也会在界面中被渲染出来
  • 1.3 vue实例:计数器
    • 按钮的事件监听:click-》methods
  • 1.4 vue模板
2. 插值语法
  • 2.1 v-once
  • 2.2 v-html
  • 2.3 v-text
  • 2.4 v-pre
  • 2.5 v-cloak
3. v-bind
  • 3.1 v-bind绑定基本属性
    • src
    • href
  • 3.2 v-bind动态绑定class
    • 对象语法
    • 数组语法
  • 3.3 v-bind动态绑定style
    • 对象语法
    • 数组语法
4.计算属性
  • 4.1 firstname+lastname拼接
  • 4.2 数组中属性数据相加

··············································

vue初体验
1.1 Hello vuejs

首先,进行vue.js的导入,官网上下载后将其放到文件夹下,在html中通过script进行应用,注意路径的正确。调用vue将使用到new Vue,新创建一个vue对象,在其中进行处理。

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

创建Vue对象的时候,传入了一些options:{}
{}中包含了el属性:该属性决定了这个Vue对象挂载到哪一个元素上,上方是是挂载到了id为app的div元素上
{}中包含了data属性∶该属性中通常会存储一些数据
这些数据可以是我们直接定义出来的,比如像上面这样。
也可能是来自网络,从服务器加载的。
在网页中将会显示message和name的数据,由以上可以看出,vue通过双大括号的形式取用在data中的数据,这样做的好处是,对数据进行修改或增加等操作时,可以实时地更新到网页上进行显示。

1.2 vue列表

使用v-for对数组数据进行页面上的显示,不再需要像原来的语句一样,获取每一个数据再进行展示,只需要使用v-for就能直接将数组中的所有数据进行循环展示,代码变得简单易懂。而且vue是响应式,所以添加删除等操作都能直接在界面上更新出来。

<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>
1.3 vue案例-计数器

两个按钮控制数字的变化,数字使用双括号实时获取,点击按钮对数字变量进行增加减少操作
v-on进行按钮的绑定,也可简化为@,简单的按钮响应函数可以直接嵌入html中,如<button v-on:click="counter--">+</button>,也可以使用函数,再在vue的methods属性中进行函数的定义,如<button v-on:click="add">+</button>,响应函数中对变量counter的数字进行修改

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

<script src="../js/vue.js"></script>
<script>
    //let(变量)/const(常量)
    //编程范式:声明式编程
    const app = new Vue({
        el:'#app',   //用于挂载要管理的元素
        data:{   //定义数据
            counter:'0',
        },
        methods:{
            add:function () {
                this.counter++;
            },
            sub:function () {
                this.counter--;
            }
        }
    })

    //1.拿button元素
    //2.添加监听事件
</script>

在这里插入图片描述

1.4 vue的template模板

可以将经常会使用到的代码封装成一个模板,之后可以根据组件名称轻松调用
根据以下图片添加新模板
在这里插入图片描述

设置在html中调用所要写的模板名缩写以及描述(可随意),将需要作为模板调用的代码复制进模板文本中
在html中使用时只需写<vue就可以显示下面的模板文本中的内容
在这里插入图片描述
需要注意设置该位置的代码适配类型,在thml中使用就需要点选thml
在这里插入图片描述

2. 插值语法

v-once v-html v-text v-pre v-cloak 都是插值语法,为了将data中的数据显示到html中

2.1 v-once

v-once就意味着数据只能显示而不会再根据数据的变化进行变化,因为vue是可以实时更新的,所以对data中数据进行修改的话,页面上的显示也会变化,而加上v-once属性的话,对vue-data中的数据进行修改,也不会改变其显示

<div id="app">
  <h2>{{message}}</h2>
  <h2 v-once>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
  const app=new Vue({
        el:'#app',
        data:{
          message: '你好',
        }
      })
</script>
2.2 v-html

v-html主要应用在回调当中,例如在某个地方获取到了一些数据,而这个数据正好是html的语句,其中带有网址或者图片数据,那么就需要使用v-html对获取的数据进行分析,提取出所需的数据并进行展示。

<div id="app">
  <h2>{{url}}</h2>
  <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>

下图可看出,直接调用url的话,不会对其内容进行解析,原本什么样就什么样,而使用了v-html的组件可以解析提取出有效网址并进行显示
在这里插入图片描述

2.3 v-text

v-text其实和双括号是一样的进行显示,不过对比双括号来说,使用双括号可以进行数据的拼接,例如<h2>{{message}},哈哈</h2>,会出现message数据加上哈哈这个文本进行显示,而使用v-text的话,<h2 v-text="message">哈哈</h2>,message数据会将哈哈这个文本覆盖,所以在使用上来看不太方便和灵活,一般不使用

<div id="app">
  <h2>{{message}}</h2>
  <!--不灵活-->
  <h2 v-text="message"></h2>
</div>
<script src="../js/vue.js"></script>
<script>
  const app=new Vue({
    el:'#app',
    data:{
      message: '你好'
    }
  })
</script>
2.4 v-pre

一句话来说就是原封不动地进行展示,在一些特殊情况下,使用v-pre可以将双括号数据直接进行展示,目前还没懂这个到底有什么用

<div id="app">
  <h2>{{message}}</h2>
  <!--原封不动的显示,而不进行解析-->
  <h2 v-pre>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
  const app=new Vue({
    el:'#app',
    data:{
      message: '你好'
    }
  })
</script>

在这里插入图片描述

2.5 v-cloak

v-cloak主要用来在网络不好的情况可以改善显示效果的。按顺序来说先是渲染h2标签中的数据,也就是页面上先会展示出{{message}},在调用vue对象后,才将message对应的数据进行赋值,在页面上才进行变化成真实数据,所以在卡顿的状态下,就可能出现{{message}}被显示出来而数据还没赋值的尴尬效果,为了解决这个问题,可以使用v-cloak对变迁进行暂缓展示,等待vue数据获取完成后再进行显示
首先要设置v-cloak所对应的样式,即不显示

  <style>
    [v-cloak]{
      display: none;
    }
  </style>

vue解析之前,标签会带上样式,而vue解析之后样式将被去除,也就是显示出标签内容

  <style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>
<div id="app">
  <h2>{{message}}</h2>
  <h2 v-cloak>{{message}}</h2>
</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>
3. v-bind
3.1 v-bind的基本使用

在需要网址或者图片地址时,使用mustache语法无法进行解析,所以需要使用v-bind进行src和href的绑定赋值
v-bind:的简化写法(语法糖写法)-》:

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

  <!--语法糖写法-->
  <img :src="imgURL">
  <a :href="aHref">百度一下</a>
</div>
<script src="../js/vue.js"></script>
<script>
  const app=new Vue({
    el:'#app',
    data:{
      message: '你好',
      imgURL: 'https://pp.letoom.com/Uploads/vod/2020/5f5650ed5562b.png',
      aHref: 'https://baidu.com'
    }
  })

3.2 v-bind动态绑定class

在实际应用中,举个例子,标题栏的颜色其实需要根据用户手机颜色的变化而变化,所以需要实时对其进行颜色的变化,就不能将class写死,需要使用v-bind对class进行管理,通过状态的变化决定class的显示与否
最主要的代码就是这一句:<h2 class="title" v-bind:class="{active: isActive,line: isLine}">{{message}}</h2>,class对应的属性为true就显示,否则不显示,在案例中,使用按钮对其状态进行切换,查看效果,如觉得前面的判断太长影响效果,也可写一个函数,返回所需要的数据,对class进行展示,如下面代码的getClasses()所示
点击按钮时对class:active的isActive属性进行切换,使其class属性展示或者不展示

<style>
  .active{
    color: red;
  }
</style>
<body>
<div id="app">
 <!--<h2 class="active">{{message}}</h2>-->
  <!--<h2 :class="active">{{message}}</h2>-->
  <!--<h2 v-bind:class="{类名1: bool值,类名2:bool值}">{{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: '你好',
      active: 'active',
      isActive: true,
      isLine:true
    },
    methods:{
      btnClick:function () {
        this.isActive=!this.isActive
      },
      getClasses:function () {
        return {active: this.isActive, line: this.isLine}
      }
    }
  })
</script>

以上是对象语法,也可以使用数组语法,不过数组语法也就是为了使用class中的属性,书写时就需要固定class的个数,实现不了上面的切换效果,所以没什么用

<div id="app">
  <!--字符串:直接使用-->
  <h2 class="title" :class="['active','line']">{{message}}</h2>
  <!--变量:获取data中的数据-->
  <h2 class="title" :class="[active,line]">{{message}}</h2>
  <h2 class="title" :class="getClasses()">{{message}}</h2>
</div>

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

3.3 中场作业

实现点击列表的某一个项,这一项就变红,别的为黑色

首先就是要进行列表的显示,上面的1中已经说明过,使用v-for对数组数据进行展示,其次需要使用v-bind对其class进行设置,最后需要添加响应事件,对鼠标点击进行响应,点击到的那一项变红
需要获取鼠标点击的是index下标,将其与每个显示的

  • 标签中的数据下标进行对比,若是一致的,则将其class展示显示为红色
    设置鼠标获取的下标存储的变量,以及class变化所需要的变量,以及展示用的列表数组数据
  •  data:{
          message:'你好',
          movies:['星际穿越','大话西游','少年派','盗梦空间'],
          isActive: true,
          isLine:true,
          change: 0,
        },
    

    设置class样式active的颜色

    <style>
      .active{
        color: red;
      }
    </style>
    

    编写页面,并设置class变化的对象语法和响应函数
    若点击的下标和当前v-for循环中显示的下标相同就显示class中的样式–红色

    <div id="app">
      <ul>
        <!--<li v-for="m in movies">{{m}}</li>-->
        <li v-for="(m,index) in movies" @click="leftChange(index)" v-bind:class="{active: change==index}">{{m}}</li>
      </ul>
    </div>
    

    编写标签的响应函数,将鼠标点击位置的下标赋值给变量

     methods:{
          leftChange:function (index) {
            this.change=index;
          }
        }
    
    3.4 v-bind动态绑定style

    动态绑定style可以灵活的运用样式,对样式value进行修改直接可以改变页面的显示,比较方便
    一般是使用v-bind:{属性名:value值}的形式进行样式的绑定,可以使用驼峰式如fontSize或者中间使用-连接如font-size,需要注意font-size需要使用单引号括起来否则会出错,所以一般使用驼峰式进行书写。实际value值也需要单引号,否则会被当做变量进行处理,出现问题。
    最普遍的应用是变量调用data中的数据进行展示,需要注意转化为字符串的问题
    多个style也可以进行显示,中间使用逗号隔开

    <div id="app">
      <!--<h2 :style="{key(属性名): value(属性值)}">{{message}}</h2>-->
    
      <!--50px必须加上单引号,否则会被当做变量来解析-->
      <h2 :style="{fontSize: '50px'}">{{message}}</h2>
      <h2 :style="{'font-size': '50px'}">{{message}}</h2>
    
      <h2 :style="{fontSize: finalSize1}">{{message}}</h2>
      <h2 :style="{fontSize: finalSize2+'px'}">{{message}}</h2>
    
      <h2 :style="{fontSize: finalSize2+'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:'你好',
          finalSize1: '100px',
          finalSize2: 100,
          finalColor: 'red'
        },
        methods:{
          getStyles:function () {
            return {fontSize: this.finalSize2+'px',backgroundColor: this.finalColor}
          }
        }
      })
    </script>
    

    以上是对象语法,也可使用数组语法
    数组语法其实就是将对象语法中的一整句样式如backgroundColor: 'red'提取成一个数组对象进行展示

    <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>
    
    4. 计算属性

    计算属性就是vue中的computed属性,在数据需要进行拼接和多次调用时比较适用

    4.1 计算属性的基本使用

    例如人名的姓和名的拼接,可以使用mustache语法进行数据的拼接,也可以使用methods定义一个函数进行字符串的拼接再返回展示,而现在要说的是另一个方法:计算属性
    其实和methods用法上差不多,不过在命名上,既然是属性就直接设置名称而不要在加get等动作进行区分了。在计算属性中返回所需的连接字符串。在调用时也不需要函数的()
    为什么不适用methods而使用computed呢?在多次展示时,每次都会进行函数的调用,减低了运行的效率,而使用computed,调用时会识别其中是否有数据被修改过,如没有修改就直接展示之前的结果,不会再进行调用,提高了效率,所以在多次调用时,使用computed更有好处

    <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: 'Lebrown',
          lastname: 'James'
        },
        //computed:计算属性()
        computed:{
          fullname:function () {
            return this.firstname+'  '+this.lastname
          }
        },
        methods:{
          getFullName:function () {
            return this.firstname+'  '+this.lastname
          }
        }
      })
    </script>
    
    4.2 计算属性的复杂操作

    如果说上面的简单的数据拼接可以直接使用mustache语法的话,那么现在要说的复杂操作,用mustache就会很难受
    定义一个数组books,books中有价格属性,需要计算所有book的价格,如果使用mustache语法,需要一个一个获取books中的数据的价格属性再进行相加,显然又繁琐代码有很长,这时候就需要计算属性进行操作了
    定义一个totalprice的计算属性,在computed中对其进行计算
    使用for循环对books中的价格进行循环相加,并且返回一个数值给页面,页面直接展示获取到的数值
    直接使用for循环很方便,并且使用计算属性,将总价格当成一个属性来计算会更舒服,不过使用methods运用函数来计算也可以

    <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=result+this.books[i].price
            }
            return result
    
            // for (let i in this.books){
            //
            // }
            // for(let book of this,books){
            //
            // }
          }
        }
      })
    </script>
    

    ·················
    以上就是这周主要的学习内容了,学习到目前为止,觉得vue的很多地方其实和小程序很相似,所以学起来也没有觉得很难懂,之后会继续进行学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值