我写小程序像菜虚鲲——2、🐔你太美(中)

简介: 本节内容比较简单,学习流程如下,读者根据自己的层次按需学习: 📚学一学:几分钟速成前端三剑客(HTML,CSS和JavaScript)的基本语法。 🆚比一比:从HTML、CSS无痕过渡到微信小程序的WXML、WXSS。 🐱瞄一瞄:微信小程序都提供了哪些组件。 🔥搞一搞:控制组件隐藏显示两种方法:block wx:if VS hidden属性。 🚀爽一爽:重复代码抽模板template/组件component,哪里用到哪里导。 🌝皮一皮:反编译别人的小程序,学(chao)习(xi)下组件怎么堆。

2、block wx:if vs hidden


在日常开发中有一个很常见的需求,根据不同的情况控制组件的显示或隐藏。


在微信小程序中可以通过<block wx:if>hidden属性来控制,使用代码示例如下:


<!-- index.js -->
//添加一个变量控制
Page({
  data: {
    isLogin: false  //是否登录
  },
})
<!-- index.wxml -->
//使用<block wx:if>
<view class="container">
    <block wx:if="{{isLogin}}">
        <view>已登录</view>
    </block>
    <block wx:else>
        <view>未登录</view>
    </block>
</view>
//使用hidden属性控制
<view hidden="{{isLogin}}">未登录</view>
<view hidden="{{!isLogin}}">已登录</view>


两种方法都可以实现我们想要的效果,接着说下两者的区别:


  • wx:if惰性,如果初始渲染条件为false,什么都不做,直到条件第一次为true时才开始局部渲染,有更高的切换消耗,适用于运行条件改变不太频繁的场景。


  • hidden:组件始终会被渲染,只是控制显示与隐藏,有更高的初始渲染消耗,
    适用于频繁切换的场景。


另外,有一点要注意:


block并不是一个组件!!!它仅仅是一个包装元素不会在页面中做任何 渲染,只接受控制属性如wx:if,wx:for等。比如你想当条件成立时,显示这一堆组件,不显示的时候用那堆组件,就可以用block包裹。如果只有一个组件需要判断,就没必要裹一层block,比如上面的代码完全可以把block去掉:


<view wx:if="{{isLogin}}">已登录</view>
<view wx:else>未登录</view>


3、模板template与组件component


页面写多了,自然存在一些重复代码,毕竟美工也是想偷懒的,有相同或类似的地方实属正常。不像美工直接复制个图层粘贴下就好了,我们除了需要复制页面代码,还可能还需要去复制样式,交互逻辑等。每次都手动去复制粘贴,多捞啊,作为一个喜欢效(tou)率(lan)的开发仔,肯定要想办法把相关的代码抽取出来啊,用到的时候导一导就好。而在小程序中提供了两种复用模式:


  • template模板,主要用于展示,函数需要在调用页另外写。


  • component组件,可以有自己的业务逻辑,可看做单独的page页面,用于业务逻辑交互多的场景。


接着我们写两个最简单的代码来分别体验下这两者的区别。


模板template


① 模板文件的创建与引用:


新建templates文件夹 => 新建一个text.wxml文件 => 模板部分使用<template>标签包裹 => 可以写多个模板,通过name属性区分:


<!-- test.wxml -->
<template name="text">
        <text>模板文字</text>
</template>


② 模板导入:


index.wxml中通过 import标签 引入模板文件 => 通过template标签的is属性确定引入的是哪个模板:


<!-- index.wxml -->
<import src="../../templates/text.wxml" />
<view class="container">
        <template is="text"/>
</view>


运行结果如下:



③ 模板样式导入:


通过@import方式导入样式文件:


<!-- test.wxml -->
<template name="text">
        <text class="blue-text">模板文字</text>
</template>
<!-- index.wxss -->
.blue-text { color: blue; }
<!-- index.wxss -->
@import "../../templates/text.wxss" ;


运行结果如下



④ 数据传递与事件处理


有时可能需要往模板中传递数据,或者处理一些事件,比如点击按钮显示Toast。

改下模板文字由js传,添加一个button,一个点击事件。


<!-- test.wxml -->
<template name="text">
        <text class="blue-text">{{show}}</text>
</template>
<template name="button">
        <button bindtap="onClick">按钮</button>
</template>
<!-- index.js -->
Page({
  data: {
    content: {
      show: "哈哈"
    }
  },
  onClick: function () {
    wx.showToast({
      title: '点击了',
    })
  }
})
<!-- index.wxml -->
<import src="../../templates/text.wxml" />
<view class="container">
        <template is="text" data="{{...content}}"/>
        <template is="button"/>
</view>


运行结果如下



组件component


新建compoments文件夹,新建一个test文件夹,把test.wxml和test.wxss丢里面去,调整下test.wxml的代码:


<view>
  <text class="blue-text">{{content.show}}</text>
  <button bindtap="onClick">按钮</button>
</view>


接着新建一个test.js文件,自定义组件的js和page的js有些不一样:


Component({
  //组件的属性列表
  properties: {
    name: {
      type: String,
      value: '123'
    }
  },
  //组件的初始数据
  data: {
    content: {
      show: "哈哈"
    }
  },
  // 组件的方法列表
  methods: {
    onClick: function () {
      wx.showToast({
        title: '点击了',
      })
    }
  }
})


接着还需要添加一个test.json文件,声明这是一个组件


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


引用控件,还需要在json进行配置,打开index.json,添加:


"usingComponents": {
    "test": "../../components/test/test"
}


接着index.html去引用这个控件,可以传入js里定义的属性,比如这里的name:


<!-- index.wxml -->
<view class="container">
    <test name="Test"></test>
</view>


运行结果如下:



关于自定义组件的内容还有很多,后面会结合实例讲,现在想了解的可移步至:


developers.weixin.qq.com/miniprogram…


0x3 🐔你实在是太美贝贝(逆向微信小程序)



撸迅先森曾经这样说过:



借(chao)鉴(xi)别人的程序,可以说是开发仔的日常了:



看下别人页面是怎么堆的,样式怎么调的,动效怎么做的,逻辑怎么写的。

但是商用的项目,别人是不可能直接给你源码,让你借(chao)鉴(xi)的。

那么只能通过一些旁门左道的手段来获取源码了,就是:反编译


❗️❗️❗️FBI Warning❗️❗️❗️


反编译别人源码的初衷只是为了:研究学习,看下别人怎么实现某个功能

点!不要去直接用别人的素材(版权),还有恶心改点东西的二次打包别人

的小程序商用,别人发现是会告你的,吃官司赔钱,严重点要去里面蹲的!!

自己把握好分寸吧,毕竟:

1、获取微信小程序源码包wxapkg


微信小程序的源码托管在微信服务器上的,当第一次打开小程序时,会把小程序的源文件下载到本地,然后在解压编译执行。然后怎么拿到这个源文件呢?抓包拿到源文件URL再去下载?naive,抓微信的链接基本离开解密,先不说能不能解出来,你每反编译一个微信小程序就抓一次?既然都下载到手机里,直接找到文件,复制到电脑上就好了。


你需要一台root了的安卓鸡,或者越狱了的苹果鸡


(笔者只有安卓鸡,就以为安卓机为例)之所以要root权限因为小程序源文件放在:

/data/data/com.tencent.mm/MicroMsg/{UserId}/appbrand/pkg

目录下,UserId是一串16进制的字符串。这里笔者使用RE文件管理器进入上述目录,

可以看到罗列的小程序的源文件:



但是这样一看,很难找出哪个是我们的目标。可以先打开微信,把目标小程序删除,

然后搜索找到小程序,打开,再回到这个目录下,按照日期降序排列,第一个就是

我们的目标小程序的源文件了!这里以喜茶GO小程序为例:



如图就是喜茶GO的小程序源文件了,接下来你有两种可选的方式把它弄到电脑上:


  • 1.压缩文件;


  • 2.复制文件到另一个目录,比如Download;


然后通过微信或者QQ发送到电脑,这里如果直接发送到话,会报文件找不到的!


相关文章
|
小程序 前端开发 容器
我写小程序像菜虚鲲——3、你能17张牌把我秒杀,我当场把电脑屏幕吃掉(下)
本节来肝下「微信小程序中布局」相关姿势点。希望你学完本章后,可以:根据设计师给的设计稿,堆砌控件。
128 0
|
小程序
我写小程序像菜虚鲲——3、你能17张牌把我秒杀,我当场把电脑屏幕吃掉(中)
本节来肝下「微信小程序中布局」相关姿势点。希望你学完本章后,可以:根据设计师给的设计稿,堆砌控件。
151 0
|
编解码 小程序 前端开发
我写小程序像菜虚鲲——3、你能17张牌把我秒杀,我当场把电脑屏幕吃掉(上)
本节来肝下「微信小程序中布局」相关姿势点。希望你学完本章后,可以:根据设计师给的设计稿,堆砌控件。
137 0
|
小程序 JavaScript 前端开发
我写小程序像菜虚鲲——2、🐔你太美(下)
本节内容比较简单,学习流程如下,读者根据自己的层次按需学习: 📚学一学:几分钟速成前端三剑客(HTML,CSS和JavaScript)的基本语法。 🆚比一比:从HTML、CSS无痕过渡到微信小程序的WXML、WXSS。 🐱瞄一瞄:微信小程序都提供了哪些组件。 🔥搞一搞:控制组件隐藏显示两种方法:block wx:if VS hidden属性。 🚀爽一爽:重复代码抽模板template/组件component,哪里用到哪里导。 🌝皮一皮:反编译别人的小程序,学(chao)习(xi)下组件怎么堆。
205 0
|
JSON 前端开发 JavaScript
我写小程序像菜虚鲲——2、🐔你太美(上)
节内容比较简单,学习流程如下,读者根据自己的层次按需学习: 📚学一学:几分钟速成前端三剑客(HTML,CSS和JavaScript)的基本语法。 🆚比一比:从HTML、CSS无痕过渡到微信小程序的WXML、WXSS。 🐱瞄一瞄:微信小程序都提供了哪些组件。 🔥搞一搞:控制组件隐藏显示两种方法:block wx:if VS hidden属性。 🚀爽一爽:重复代码抽模板template/组件component,哪里用到哪里导。 🌝皮一皮:反编译别人的小程序,学(chao)习(xi)下组件怎么堆。
373 0
|
开发框架 小程序 前端开发
我写小程序像菜虚鲲——1、唱,跳,rap,篮球(下)
本节内容是学习微信小程序开发,希望初学者学完这个系列可以撸出一个简单基本的小程序
148 0
|
1月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
215 3