微信小程序点击喜欢+1 自定义组件

效果:

1  新建

先新建一个盛放所有组件的目录components

再在components下新建第一个组件的目录like, 这样的两级目录我们先新建好

编写组件的第一步,如同我们编写的page页面一样,我们首先给个这组件新建几个文件,我们利用小程序开发工具新建功能快速新建组件所需要的全部文件

右击\新建\Component

 

2   使用

必须在页面里引用组件

在页面的.json文件里,加入一个配置usingComponents, 指定使用哪些组件,

usingComponents接收的是一个对象,{}里面的是键值对"key":"value",

key是给组件起的名字(一般为xxx-cmp)   

value是组件的路径(注:需要使用绝对路径,不然会报错)

{
    "usingComponents": {
        "v-like": "/components/like/index"
    }
}

使用我们引用的组件

在wxml里面就像用<view><imgae>一样,

<v-like></v-like>

即可在页面显示组件的内容了

 

3 组件编写

components中的wxml:

<!-- components/like/index.wxml -->
<view class="container" bind:tap="onLike">
    <!-- 如果要在双引号里面再表示字符串的时候要用单引号,否则会报错 -->
    <!-- <image src="{{like?'images/like.png':'images/like@dis.png'}}" /> -->   
    <image src="{{like?yesSrc:noSrc}}" />
    <text>{{count}}</text>
</view>

components中的wxss:

/* components/like/index.wxss */
.container{
    /* inline-flex消除块状并自适应 */
    display: inline-flex;
    flex-direction: row;
    /* 设置完偏移量后数字会显示不完整,是因为组件高度不够高,这时需要设置一下padding */
    padding: 10rpx;
}
.container image{
    width: 32rpx;
    height: 28rpx;
}
.container text{ 
    font-family: "PingFfangSC-Thin"; 
    font-size: 24rpx;
    /* 设置完偏移量和padding可能数字还是不是理想效果,不需要再次增大bottom,是因为文字都会间距,消除间距 */
    line-height: 24rpx;
    color: #bbbbbb;
    /* 设置一个偏移量relative   bottom往上偏移,  left往右偏移 */
    position: relative;
    bottom: 10rpx;
    left: 6rpx;
}

注意:在自定义组件中只有font  color样式可以被继承,

components/like/index.josn

{
  "component": true,
  "usingComponents": {}
}

components/like/index.js

// components/like/index.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    like: {// 属性名
      type: Boolean, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
      //value: false, // 属性初始值(可选),如果未指定则会根据类型选择一个
      // observer: function(newVal, oldVal, changedPath) {
      //    // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'
      //    // 通常 newVal 就是新设置的数据, oldVal 是旧数据
      // }
    },
    count:{
      type: Number,
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    // like: true,
    // count: 9,
    yesSrc: 'images/like.png',
    noSrc: 'images/like@dis.png',
  },

  /**
   * 组件的方法列表
   */
  methods: {
    onLike: function (event) {
      //this.properties.like就可以拿到properties下的任何值了,ES6后把var换成了let来定义变量,
      //区别:let允许你声明一个作用域被限制在块级中的变量,语句或者表达式,
      //     var它声明的的变量只能是全局或者整个函数块的
      let like = this.properties.like
      let count = this.properties.count
      //count值的变化取决说like,如果like为真(当前状态是喜欢),点击一下为不喜欢,就要-1,否则+1
      count = like?count-1:count+1
      //数据绑定更新
      this.setData({
        count:count,
        like:!like
      })
    }
  }
})

更多属性介绍:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值