发表于: 2020-01-03 23:07:45

0 1423


今天完成的事情:

总结复盘项目

点赞实现功能

签到实现功能

视频的实现功能

文章收起和展开功能
明天计划的事情:

真实现PPT

学习VU框架
遇到的问题:


收获:

hidden

 这个属性和IF属性差不多一样只是这个属性只是用来控制显示和隐藏的如果你只是想让你的一个盒子进点击显示或者隐藏那么就比用IF好。

<view class="wx-popup" hidden="{{flag}}">
 <view class='popup-container'>
   <view class="wx-popup-title">{{title}}</view>
   <view class="wx-popup-con">{{content}}</view>
   <view class="wx-popup-btn">
     <text class="btn-no" bindtap='_error'>{{btn_no}}</text>
     <text class="btn-ok" bindtap='_success'>{{btn_ok}}</text>
   </view>
 </view>
</view>


.wx-popup {
 position: absolute;
 left: 0;
 top: 0;
 width: 100%;
 height: 100%;
 background: rgba(0, 0, 0, .5);
}
.popup-container {
 position: absolute;
 left: 50%;
 top: 50%;

 width: 80%;
 max-width: 600rpx;
 border: 2rpx solid #ccc;
 border-radius: 10rpx;
 box-sizing: bordre-box;
 transform: translate(-50%, -50%);
 overflow: hidden;
 background: #fff;
}
.wx-popup-title {
 width: 100%;
 padding: 20rpx;
 text-align: center;
 font-size: 40rpx;
 border-bottom: 2rpx solid red;
}
.wx-popup-con {
 margin: 60rpx 10rpx;
 text-align: center;
}
.wx-popup-btn {
 display: flex;
 justify-content: space-around;
 margin-bottom: 40rpx;
}
.wx-popup-btn text {
 display: flex;
 align-items: center;
 justify-content: center;
 width: 30%;
 height: 88rpx;
 border:   2rpx solid #ccc;
 border-radius: 88rpx;
}

先写一个简单的弹窗小样式.

Component({
 /**
  * 组件的属性列表
  */
 properties: {
   title: {            // 属性名
     type: String,     // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
     value: '标题'     // 属性初始值(可选),如果未指定则会根据类型选择一个
   },
   // 弹窗内容
   content: {
     type: String,
     value: '请先登陆账户'
   },
   // 弹窗取消按钮文字
   btn_no: {
     type: String,
     value: '取消'
   },
   // 弹窗确认按钮文字
   btn_ok: {
     type: String,
     value: '确定'
   }

 },

 /**
  * 组件的初始数据
  */
 data: {
   flag: true,
 },

 /**
  * 组件的方法列表
  */
 methods: {
   hidePopup: function () {
     this.setData({
       flag: !this.data.flag
     })
   },
   //展示弹框
   showPopup() {
     this.setData({
       flag: !this.data.flag
     })
   },
   /*
   * 内部私有方法建议以下划线开头
   * triggerEvent 用于触发事件
   */
   _error:function() {
     //触发取消回调
     this.triggerEvent("error")
   },
   _success() {
     //触发成功回调
     this.triggerEvent("success");
   }
 
 }
})

注意:

我这个是自定义组件是在app全局配置上面是没有的。Component有这个就表示是自定义创建的组件

1.自定义组件内部写法:

properties:组件对外属性,是属性名到属性设置的映射表。

意思:

比如B文件夹为自定义组件,A文件夹为要让B文件显示出来的,那么B文件里面的一写变量如<view>{{title}}</view> title里面的属性要在A文件显示出来那么你就要把变量写在properties:属性列表里面.

// 属性定义(详情参见下文)
 properties: {
  title: { // 属性名
     type: String,
     value: ''
   },
   myProperty2: String // 简化的定义方式
 },

 data: {}, // 私有数据,可用于模板渲染

它里面的写法比如你的变量title变量那里面的值就要按照上面的格式进行填写,type它的基本类型,value的值是它的变量值。

2.methods:组件方法。组件的方法,包括事件响应函数和任意的自定义方法,关于事件响应函数的使用。

  methods: {
   onMyButtonTap: function(){
     this.setData({
       // 更新属性和数据的方法与更新页面数据的方法类似
     })
   },

和上面的properties一个道理都是和另一使用这个组件的文件家而进行互相联系的。

注意:methods

如果你要在A JS中应用 B js中的方法那么你一定要把方法或者函数之类的写在methods,这是微信小程序的标准之一。

调用自定义组件

首先创建好自定义组件

第一步

你那个组件要用自定义组件需要找到JSON进行声明

代码如下:

"usingComponents": {
   "module": "./module/module"
 },

第二步在所用的组件JS进行声明

 onReady: function() {
   this.module = this.selectComponent("#module");
 },

在页面初始返回组件实例,就相当把组件里面的一写方法都赋值到module上面。

<module 
 id="module"
 bind:error="_error"
 bind:success="_success"></module>
</view>

这就相当于给用id module来代表这个组件,通过this.module.hidePopup()

来调用这个弹窗,因为我弹窗写的是hidden 相当于IF判断用来判真假,而hidePopup()的里的方法是:

 hidePopup: function () {
     this.setData({
       flag: !this.data.flag
     })
注意:要通过其他组件来调用自定义组件里面的方法一定要写在methods(组件方法列表)里面。不然你是调用不了的。

组件间通信与事件

监听事件

 <module 
 id="module"
 bind:error="_error"
 bind:success="_success"></module>

通过bind事件绑定来绑定自定义组件里面的函数方法。

注意bind是专门来绑定的后面跟这名字可以随便起但我建议还是取你的函数命名比较好这样,因为你点击这相当于是调用自定义里面的函数方法.

自定义组件代码
_success() {
     console.log("我2")
     //触发成功回调
     this.triggerEvent("success");
     this.hidePopup()
   
   }

triggerEvent():事件触发函数。

主要在于是如图你在这个方法里面定义一些变量或者其他数据可以在使用自定义组件打印出来

image-20200103154121050

可以看到图片进行打印出来,图片红的触发事件选项不太清楚为什么没有打印出来(以后在补充)。

总结:

我们使用自定义组件里面的方法函数有很多种方法实现,这里有2种方法实现一种是通过bind事件来绑定自定义方法函数。

第二种

直接在自定义组件的HTML里面创建2个bindtap绑定点击事件,当然然后通过selectComponent:返回组件实例,然后直接通过this.module._error()来直接调用里面的函数方法虽然不太理解原理通过实验可以行的通。






返回列表 返回列表
评论

    分享到