精华内容
下载资源
问答
  • 目录page和component的区别page模式一,配置app.json参数,设置头部底部样式1,设置头部2,设置底部3,新建页面 ...开发一个小程序前先确定是否需要自定义component模板来做,相对来说,page比较...

    page和component的区别

    简单地说,page是官方默认组件,component是自定义组件。当你需要开发一个有特色的,可灵活配置样式的小程序,就要用到component。开发一个小程序前先确定是否需要自定义component模板来做,相对来说,page比较简单快捷,但是样式固定单一。而component可以有更多功能,例如头部返回主页按钮,头部图片背景,自定义底部导航样式和底部导航根据头部背景色而变化等等。

    page模式

    如果是简单功能,页面不多的小程序,即可直接配置参数,所有页面用page注册即可。官方文档

    1,设置头部

    "window": {
        "backgroundTextStyle": "下拉 loading 的样式,仅支持 dark / light	",
        "navigationBarBackgroundColor": "背景色",
        "navigationBarTitleText": "标题",
        "navigationBarTextStyle": "导航栏标题颜色,仅支持 black / white"
      },
    

    2,设置底部

    首先找几个底部的图标,分2种颜色,点击前和点击后(建议灰色和绿色)在这里插入图片描述

    "tabBar": {
        "color": "#707070",//默认颜色
        "selectedColor": "#2DBB55",//选中后颜色
        "backgroundColor": "#FAFAFA",//背景颜色
        "list": [
          {
            "selectedIconPath": "image/tabBar11.png",//点击后的图标
            "iconPath": "image/tabBar1.png",//默认图标
            "pagePath": "pages/index/index",//点击后跳转的链接
            "text": "首页"//附带文字
          },
          {
            "selectedIconPath": "image/tabBar22.png",
            "iconPath": "image/tabBar2.png",
            "pagePath": "pages/staff/staff_index/staff_index",
            "text": "功能"
          },
          {
            "selectedIconPath": "image/tabBar33.png",
            "iconPath": "image/tabBar3.png",
            "pagePath": "pages/visitor/visitor_index/visitor_index",
            "text": "我的"
          }
        ]
      },
    

    看看效果图在这里插入图片描述

    3,新建页面

    新建一个目录后,会有js,json,wxml和wxss4个文件,其中wxml和wxss其实就是html和css差不多,主要是配置js文件。打开js文件后可以看到默认帮你列出很多api,把你想执行的动作写到相应的api里。

    特别注意的是

    如需从服务器获取再进行渲染的数据,最好请求和渲染都写在onShow里,避免页面样式没加载完就开始渲染了。
    在这里插入图片描述

    component模式

    官方文档

    1,新建组件-自定义头部栏

    组件例子来自于ColorUI2.0-作者【文晓港】
    JS
    1,在 methods配置了2个方法,分别是头部的返回上一页和返回首页,
    2,properties里的4个对外属性,对应头部栏的背景色,返回主页按钮,上一页按钮和背景图

    const app = getApp();
    Component({
      /**
       * 组件的一些选项
       */
      options: {
        addGlobalClass: true,
        multipleSlots: true
      },
      /**
       * 组件的对外属性
       */
      properties: {
        bgColor: {
          type: String,
          default: ''
        }, 
        isCustom: {
          type: [Boolean, String],
          default: false
        },
        isBack: {
          type: [Boolean, String],
          default: false
        },
        bgImage: {
          type: String,
          default: ''
        },
      },
      /**
       * 组件的初始数据
       */
      data: {
        StatusBar: app.globalData.StatusBar,
        CustomBar: app.globalData.CustomBar,
        Custom: app.globalData.Custom
      },
      /**
       * 组件的方法列表
       */
      methods: {
        BackPage() {
          wx.navigateBack({
            delta: 1
          });
        },
        toHome(){
          wx.reLaunch({
            url: '/pages/index/index',
          })
        },
      }
    })
    

    json

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

    wxml
    1,组件模板的写法与页面模板相同。组件模板与组件数据结合后生成的节点树,将被插入到组件的引用位置上。
    在组件模板中可以提供一个 节点,用于承载组件引用时提供的子节点。

    <view class="cu-custom" style="height:{{CustomBar}}px">
      <view class="cu-bar fixed {{bgImage!=''?'none-bg text-white bg-img':''}} {{bgColor}}" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;{{bgImage?'background-image:url(' + bgImage+')':''}}">
        <view class="action" bindtap="BackPage" wx:if="{{isBack}}">
          <slot name="backText"></slot>
        </view>
        <view class="action border-custom"  wx:if="{{isCustom}}" style="width:{{Custom.width}}px;height:{{Custom.height}}px;margin-left:calc(750rpx - {{Custom.right}}px)">
          <text class="cuIcon-back top_back" bindtap="BackPage"></text>
          <text class="cuIcon-homefill top_home" bindtap="toHome"></text>
        </view>
        <view class="content" style="top:{{StatusBar}}px">
          <slot name="content"></slot>
        </view>
        <slot name="right"></slot>
      </view>
    </view>
    

    例子:1,主页页头,可分ios(居中)和安卓(居左)

      <cu-custom wx:if="{{platform=='ios'}}" bgColor="bg-gradual-{{Theme}}">
        <view slot="content">{{Name}}</view>
      </cu-custom>
      <cu-custom wx:if="{{platform!='ios'}}" bgColor="bg-gradual-{{Theme}}" isBack="{{true}}">
        <view class="text-cut text-lg" slot="backText">{{Name}}</view>
      </cu-custom>
    

    在这里插入图片描述
    在这里插入图片描述
    2,居左带返回上一页按钮

    <cu-custom bgColor="bg-gradual-{{Theme}}" isBack="{{true}}">
      <view class="text-cut flex align-center" slot="backText">
        <text class="cuIcon-back text-xxl"></text><text class="text-lg">{{Name}}</text>
      </view>
    </cu-custom>
    

    在这里插入图片描述
    3,居中带返回主页按钮

    <cu-custom bgColor="bg-gradual-{{Theme}}" isBack="{{true}}">
      <view slot="backText"><text class="cuIcon-back text-xxl"></text></view>
      <view slot="content">图片裁剪</view>
    </cu-custom>
    

    在这里插入图片描述
    4,居中带返回主页按钮和返回上一页按钮

    <cu-custom bgColor="bg-gradual-{{Theme}}" isCustom="{{true}}">
      <view slot="content">{{Name}}</view>
    </cu-custom>
    

    在这里插入图片描述
    5,更可以在头部栏使用图片当背景,

    <scroll-view scroll-y class="scrollPage">
      <cu-custom bgImage="https://image.weilanwl.com/color2.0/plugin/cjkz2329.jpg">
        <view slot="content">
          <image src="/images/cjkz.png" mode="widthFix"></image>
        </view>
      </cu-custom>
    </scroll-view>
    

    6,甚至在初始页面,只使用图片当头部栏也可以!

    <scroll-view scroll-y class="scrollPage">
      <image src='/images/BasicsBg.png' mode='widthFix' class='png' style='width:100%;height:486rpx'></image>
    </scroll-view>
    

    2,自定义底部栏

    1,特殊的个性样式

    <view class="cu-bar tabbar margin-bottom-xl bg-white">
        <view class="action text-green">
          <view class="cuIcon-homefill"></view> 首页
        </view>
        <view class="action text-gray">
          <view class="cuIcon-similar"></view> 分类
        </view>
        <view class="action text-gray add-action">
          <button class="cu-btn cuIcon-add bg-green shadow"></button>
          发布
        </view>
        <view class="action text-gray">
          <view class="cuIcon-cart">
            <view class="cu-tag badge">99</view>
          </view>
          购物车
        </view>
        <view class="action text-gray">
          <view class="cuIcon-my">
            <view class="cu-tag badge"></view>
          </view>
          我的
        </view>
      </view>
      <view class="cu-bar tabbar bg-black">
        <view class="action text-green">
          <view class="cuIcon-homefill"></view> 首页
        </view>
        <view class="action text-gray">
          <view class="cuIcon-similar"></view> 分类
        </view>
        <view class="action text-gray add-action">
          <button class="cu-btn cuIcon-add bg-green shadow"></button>
          发布
        </view>
        <view class="action text-gray">
          <view class="cuIcon-cart">
            <view class="cu-tag badge">99</view>
          </view>
          购物车
        </view>
        <view class="action text-gray">
          <view class="cuIcon-my">
            <view class="cu-tag badge"></view>
          </view>
          我的
        </view>
      </view>
    

    在这里插入图片描述
    2,根据颜色数组赋值控制小程序主题色,底部栏和头部栏统一颜色的做法
    先准备7彩底部图(根据主题数组颜色)
    在这里插入图片描述
    wxml

    <home wx:if="{{PageCur=='home'}}"></home>
    <server wx:if="{{PageCur=='server'}}"></server>
    <my wx:if="{{PageCur=='my'}}"></my>
    <view class="cu-bar tabbar bg-white shadow foot">
      <view class="action" bindtap="NavChange" data-cur="home">
        <view class='cuIcon-cu-image'>
          <image src="/images/tabbar/{{Home_img}}.png"></image>
        </view>
        <view class="{{Home_text}}">首页</view>
      </view>
      <view class="action" bindtap="NavChange" data-cur="server">
        <view class='cuIcon-cu-image'>
          <image src="/images/tabbar/{{Server_img}}.png"></image>
        </view>
        <view class="{{Server_text}}">服务</view>
      </view>
      <view class="action" bindtap="NavChange" data-cur="my">
        <view class='cuIcon-cu-image'>
          <image src="/images/tabbar/{{My_img}}.png"></image>
        </view>
        <view class="{{My_text}}">我的</view>
      </view>
    </view>
    

    json

    {
      "usingComponents": {
        "home": "/pages/home/home",
        "server": "/pages/server/server",
        "my": "/pages/my/my"
      }
    }
    

    js

    const app = getApp();
    Page({
      data: {
        PageCur: 'home',//默认进入主页
        Home_img: 'home_' + app.globalData.Theme,
        Server_img: 'server',
        My_img: 'my',
        Home_text: 'text-' + app.globalData.Theme,
        Server_text: 'text-gray',
        My_text: 'text-gray',
      },
    
      //底部导航切换
      NavChange(e) {
        let pagecur = e.currentTarget.dataset.cur;
        let home_img = pagecur == 'home' ? 'home_' + app.globalData.Theme:'home';
        let server_img = pagecur == 'server' ? 'server_' + app.globalData.Theme : 'server';
        let my_img = pagecur == 'my' ? 'my_' + app.globalData.Theme : 'my';
        let home_text = pagecur == 'home' ? 'text-' + app.globalData.Theme : 'text-gray';
        let server_text = pagecur == 'server' ? 'text-' + app.globalData.Theme : 'text-gray';
        let my_text = pagecur == 'my' ? 'text-' + app.globalData.Theme : 'text-gray';
        this.setData({
          PageCur: pagecur,
          Home_img: home_img,
          Server_img: server_img,
          My_img: my_img,
          Home_text: home_text,
          Server_text: server_text,
          My_text: my_text,
        })
      },
      onShareAppMessage() {
        return {
          title: app.globalData.CoinName,
          imageUrl: app.globalData.ImageUrl,
          path: '/pages/index/index'
        }
      },
    })
    

    最后component模式的底部栏页面的参数和page有所不同,已home为例
    js
    组件生命周期

    const app = getApp();
    Component({
      options: {
        addGlobalClass: true,
      },
      data: {
        Theme: app.globalData.Theme,
      },
    
      //组件的生命周期
      lifetimes: {
        created: function () {
          // 在组件实例刚刚被创建时执行
          var that = this;  
        },
        attached: function() {
          // 在组件实例进入页面节点树时执行
        },
        detached: function() {
          // 在组件实例被从页面节点树移除时执行
        },
      },
      //组件的函数
      methods: {
     	   // 组件所在页面的生命周期函数(Page里的onLoad(){},onShow(){},onShareAppMessage(){}或者自定义函数等等)
      },
      pageLifetimes: {
        show: function() {
          // 页面被展示
        },
        hide: function() {
          // 页面被隐藏
        },
        resize: function(size) {
          // 页面尺寸变化
        }
      }
    })
    

    json

    {
      "component": true
    }
    

    app.json

      "window": {
        "navigationBarBackgroundColor": "#39b54a",
        "navigationBarTitleText": "",//文字标题(加载页头时会浮现)
        "navigationStyle": "custom",//使用组件样式
        "navigationBarTextStyle": "white"
      },
      "usingComponents": {
        "cu-custom": "/colorui/components/cu-custom"//组件的路径
      },
    
    展开全文
  • page生命周期 打开页面的加载顺序:onLoad,onShow,onReady 切换页面时只会加载onShow,onHide /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { }, /** * 生命周期函数--监听页面初次...

    APP生命周期

    onLaunch onShow onHide

      /**
       * 当小程序初始化时,触发(全局只触发一次)
       */
      onLaunch: function () {
      
      },
      /**
       * 当小程序启动,或从后台进入前台显示时触发
       */
      onShow:function(options){
    
      },
      /**
       * 当小程序从前台进入后台时触发
       */
      onHide:function(){
    
      }
    

    page生命周期

    打开页面的加载顺序:onLoad,onShow,onReady
    切换页面时只会加载onShow,onHide

    /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
    
      },
    
      /**
       * 生命周期函数--监听页面初次渲染完成
       */
      onReady: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面显示
       */
      onShow: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面隐藏
       */
      onHide: function () {
    
      },
    
      /**
       * 生命周期函数--监听页面卸载
       */
      onUnload: function () {
    
      },
    

    component生命周期

    1、可以直接在Component中定义,
    2、2.2.3之后,可以在lifetimes(推荐方式,优先级最高)中定义。
    3、一般都是两个都写,确保所有版本兼容
    created:创建
    attached :在页面打开
    detached:在页面移除

    Component({
      /**
       * 生命周期函数
       */
      lifetimes: {
        created:function(){
          //组件被创建时执行
        },
        attached: function () {
          // 在组件实例进入页面节点树时执行
        },
        detached: function () {
          // 在组件实例被从页面节点树移除时执行
        },
      },
      // 以下是旧式的定义方式,可以保持对 <2.2.3 版本基础库的兼容
      created: function () {
        //组件被创建
      },
      attached: function () {
        // 在组件实例进入页面节点树时执行
      },
      detached: function () {
        // 在组件实例被从页面节点树移除时执行
      },
      //...
    })
    
    展开全文
  • 微信小程序自定义组件Component总结

    万次阅读 多人点赞 2018-06-19 17:32:26
    没有看过微信小程序自定义组件(以下称Component)的同学可以到官网上了解一下。以下是对Component的总结:一、Component概念Component像页面一样由wxml、wxss、jsjson4个文件组成,且需要把这4个文件放在同一个目录...

    没有看过微信小程序自定义组件(以下称Component)的同学可以到官网上了解一下。

    以下是对Component的总结:

    一、Component概念

    Component像页面一样由wxml、wxss、js和json4个文件组成,且需要把这4个文件放在同一个目录中。与页面不一样的是,Component中的构造函数(也可以称构造器)是Component({}),而页面中的构造函数是Page({})。

    二、slot

    Component的slot(slot意思是插槽),主要是让你在外部的wxml可以自由的在你的Component的wxml里插入模块。大家可以在https://github.com/zhu12345618/slotDemo查看实例。

    还有一个实例是是Component接受外部样式的,官网中有例子。

    三、Component构造器

    在Component构造器中需要注意的几个属性是:properties、data、methods

    其他的:如果是属性的话,感觉用到的不多,所以就不说了;如果是函数,则都是Component的生命周期函数,官网上即可了解得很清楚。

    1. properties:对外属性,即如果外部的wxml文件传入数据时,会把数据设置成properties的属性。

    如官网例子的index.wxml:

    <!-- 页面的 WXML -->
    <my-component my-property="example" />

    这个"my-property"即对应custom-component.js里properties属性的myProperty,修改my-property就是修改myProperty

    custom-component.js如下:

    Component({
    
      behaviors: [],
    
      properties: {
        myProperty: { // 属性名
          type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
          value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个
          observer: function (newVal, oldVal) { } // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'
        },
        myProperty2: String // 简化的定义方式
      },
      data: {
        A: [{
          B: 'init data.A[0].B'
        }]
      }, // 私有数据,可用于模版渲染
    
      // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
      attached: function () { },
      moved: function () { },
      detached: function () { },
    
      methods: {
        onMyButtonTap: function () {
          this.setData({
            // 更新属性和数据的方法与更新页面数据的方法类似
            myProperty: 'Test'
          })
        },
        _myPrivateMethod: function () {
          // 内部方法建议以下划线开头
          this.replaceDataOnPath(['A', 0, 'B'], 'myPrivateData') // 这里将 data.A[0].B 设为 'myPrivateData'
          this.applyDataUpdates()
        },
        _propertyChange: function (newVal, oldVal) {
    
        }
      }
    
    })

    但是!小程序有一个问题:是如果properties中的属性是带有数字的,如:myProperty2,这样wxml里对应的就是my-property2,但是这样程序会报错,希望小程序以后可能修复这个问题。

    2. data:这里的data和页面中的data是一致的,但是这里的data只在组件内部使用。

    Tips:properties和data里的属性不能一样,否则会有冲突。

    3. methods:组件中的方法都是在这个对象里定义。

    四、组件与外部通信事件

    上面的"myProperty"是父节点设置数据到组件里,组件传数据到父节点是用事件的方式。

    注册事件,index.wxml和index.js:

    <!-- 引用组件的页面模版 -->
    <view>
      <my-component id="test" bindmyevent="myEventListener">
         <view>这里是插入到组件slot中的内容</view> 
      </my-component>
    
      <!-- 或者可以写成 -->
      <!--
        <my-component id="test" bindmyevent="myEventListener">
         <view>这里是插入到组件slot中的内容</view> 
        </my-component>
       -->
    </view>

    监听事件:

    Page({
      data: {
    
      },
      onLoad : function() {
          console.log(this.selectComponent("#test"));
      },
      myEventListener: function(e) {
        console.log("Event in index")
      }
    })
    

    发射事件component-tag-name.wxml和component-tag-name.js:

    <!-- 组件模板 -->
    <view class="wrapper">
      <button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>
    </view>
    // components/component-tag-name.js
    Component({
      properties: {},
      methods: {
        onTap: function () {
          var myEventDetail = {} // detail对象,提供给事件监听函数
          var myEventOption = {} // 触发事件的选项
          this.triggerEvent('myevent', myEventDetail, myEventOption)
        }
      }
    })

    源代码官网里有,也可以在https://github.com/zhu12345618/componentEventTest下载。

    五、组件通信的最后大招

    如果以上通信还不能满足需求,可以用this.selectComponent("#test"),这个方法需要传一个id号。

    注意上面的index.wxml中有一个代码是id="test",这样定义之后,就可以在js文件中this.selectComponent("#test")获取到这个组件了。


    最后,Component还有behaviors组件关系抽象节点等特性,但是对于一般的需求来说,不经常用到,所以就不作总结了。如果需要了解的话,可以去官网学习。

    以上是本人的一点小总结,如有不足之处,还请各位指正!

    展开全文
  • Page嵌套Component后页面加载数据方法无法触发,网上查了一些说什么的都有,最后还是参考官方api程序走一下解决,在页面加载完毕后加载数据应该使用ready() {}方法; 1.页面结构 2.生命方法 3.执行顺序 附...

    Page嵌套Component后页面加载数据方法无法触发,网上查了一些说什么的都有,最后还是参考官方api程序走一下解决,在页面加载完毕后加载数据应该使用ready() {}方法;

    1.页面结构

    2.生命方法

    3.执行顺序

    附:官方文档

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/component.html

     

     

     

    展开全文
  • 首先为什么要使用component 这里列举2个例子, 1 如果项目中多个地方使用同一个弹框, 2 两个同事合作写一个界面, 这2中情况使用组件是比较好的选择 开始吧 第一步首先创建一个包用于存放组件 要把设置成组件...
  • 前几天,菜鸟写完了component组件(有兴趣可以自己看我的文章微信小程序:你必须知道的component自定义组件),然后感觉这组件进去了,那生命周期如何? 这次就不拖泥带水了 component代码: Component({ created:...
  • Component组件生命周期使用miniprogram-computed参考 const app = getApp() Component({ behaviors: [require('miniprogram-computed')], /** * 使用全局样式属性 */ options: { addGlobalClass: true }, /...
  • 除了component,微信小程序中还有另一种组件化你的方式template模板,这两者之间的区别是,template主要是展示,方法则需要在调用的页面中定义。而component组件则有自己的业务逻辑,可以看做一个独立的page页面。...
  • 简洁版,详细参考api文档,例: index 要使用 组件ad。 一,子组件中需要的配置...2.ad组件中ad.js使用 Component构造函数: Component({ options: {}, // 这个组件的配置 properties: { // 接收父组件传过...
  • 在做小程序diy,前端返回了bannList(轮播图),如果linkRadio=1,则跳转systemLink里面的url,如果linkRadio=2,则跳转h5Link链接,(轮播图是自定义的组件),如何进行判断跳转,请各位大神指点下![图片说明]...
  • 官方文档: template模板:...component自定义组件:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ template...
  • // Page构成器 设置全局默认分享 !(function () { var PageTmp = Page Page = function (pageConfig) { pageConfig = Object.assign( { onShareAppMessage: function () { let app = getApp() const ...
  • 实质上是修改Page(obj) 或者Component(obj)中obj;往obj中的data中添加属性数据;往obj或者obj.methods中添加方法 可以直接通过this来获取数据或调用方法 在utils文件下新建baseClass文件夹,在该文件下新建三个...
  • 使用Component前言index.jstest.js注意 前言 从index页面跳转到test页面(使用Component组件),该如何实现页面通信呢?如下图所示: index.js wx.navigateTo({ url: '/pages/test/test?id=123', events: { // ...
  • pages的页面使用components的组件 1、在components写好组件c-test 2、在要使用组件页面的.json文件命名组件名字,输入组件路径 3、在要使用组件页面的.wxml文件调用组件 json文件,命名+路径 { ...
  • 当我们在实际开发过程中,面对UI给的设计图稿微信小程序默认提供的消息提示框具有很大差别的时候,自然就不能再使用微信小程序的消息提示框,而应当使用component自定义消息提示框组件。 效果图 Step1:初始...
  • 除了component,微信小程序中还有另一种组件化你的方式template模板,这两者之间的区别是,template主要是展示,方法则需要在调用的页面中定义。而component组件则有自己的业务逻辑,可以看做一个独立的page页面。...
  • 组件是写项目时常用的,那么如何自定义一个组件...官方文档微信小程序components 1. 首先我们先在项目中创建组件的文件夹 components文件夹下是我写的所有的组件 接下来我给弹窗组件起个名字 tipModel,在compo...
  • template模块与component组件,是小程序中组件化的方式。二者的区别是,template模块主要是展示,方法需要在使用template的页面中定义。而component组件,则拥有自己的js文件,整个component组件类似一个page页面。...
  • 今天学习小程序,测试组件时出现以下异常 VM1178:1 jsEnginScriptError Component is not found in path "components/like/index" (using by "pages/classic/classic") Error: Component is ...
  • 小程序component的坑

    千次阅读 2018-12-10 10:17:10
    component的class样式不会与引用页面的样式影响,但是标签样式例如,view{} page{}这样的会互相影响。
  • 微信小程序component父子组件传值

    千次阅读 2019-09-23 09:37:42
    例如,在页面的底部有一个悬浮,悬浮分两种,每种里边有四个按钮,每个按钮分为登录没登录两个状态,点击每个按钮绘根据后台传的值的状态不同分别请求不同的接口(当然了,有些处理完页面也可能是跳转,或者跳转...
  • 小程序属于Mini架构,不属于mvvm架构,所以它的自定义组件并没有进行缓存,由于自定义组件并未缓存,所以自定义组件从父组件接收的引用类型参数值被改变时,自定义组件的父组件的引用类型参数值不能实时更新 ...
  • 微信小程序如何自定义组件component

    千次阅读 2018-05-30 13:21:08
    微信小程序的自定义组件component 本文纯属自创,转载请注明出处 最近Android这边没有什么项目,而公司又开展了小程序项目,自己摸索着摸索着也就会写了一些。在界面编写的时候总是会有同一个布局反复使用的情况,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,980
精华内容 13,192
关键字:

小程序page和component