前端技术前沿1

向右看齐 2021-09-19 12:00 431阅读 0赞

git branch -a 查看本地和远程的所有分支()

查看本地分支 git branch

查看远程分支 git branch -r

WePY组件使用

  1. components={
  2. child:Child,
  3. anotherchild:Child
  4. };

props静态传值:父给儿子传递常量数据,只能传递String字符串类型

  1. <child title="mytitle"></child>
  2. <组件 :动态数据='父data中的数据名'>
  3. 父子间数据独立不干扰
  4. <组件 :动态数据.sync='父data中的数据名'>
  5. <组件 :twoWayTitle='父data中的数据名'>
  6. 循环渲染WePY组件,需要用<repeat>
  7. <repeat for="{
  8. {list}}" key="index" index="index" item="item">
  9. <child :item="item"></child>

微信小程序学习与wepy框架的使用详解

  1. 如:index.jsindex.wxmlindex.wxssindex.json

.js后缀的文件是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件,就相当于html中的css文件。

  1. <image src="{
  2. {src}}"></image>

和vue的设计模式一样MVVM 数据渲染{ { data}}
判断 wx:if,wx:else
循环wx:for.
小程序事件绑定 bindtap 、catchtap
获取循环序号 data-x

  1. <!--在wxml中-->
  2. <view class="contents">
  3. <button catchtap="choose" wx:if="{
  4. {showBtn}}">选择</button>
  5. <text wx:for="{
  6. {arrList}}" wx:key="{
  7. {index}}" data-i="{
  8. {index}}" data-type="{
  9. {item}}" bindtap="selectTab" >{
  10. {item}}</text>
  11. </view>
  12. //对应的js中
  13. data:{
  14. showBtn:true,
  15. arrList:['apple','pear','orange']
  16. },
  17. choose(){
  18. this.setData({
  19. showBtn:false
  20. })
  21. },
  22. selectTab(ev){
  23. var getAttrType=ev.target.dataset.type;
  24. var index=ev.target.dataset.i;
  25. }
  26. onLoad(){
  27. },
  28. onShow(){
  29. }
  30. 本地图片选择wx.chooseImage(OBJECT)
  31. 图片预览wx.previewImage(OBJECT)
  32. 文件上传 wx.uploadFile(OBJECT)
  33. 数据请求 wx.request()
  34. wx.setStorageSync
  35. wx.getStorageSync
  36. wx.clearStorageSync

对应的本地图片选择js

  1. //对应的本地图片选择js
  2. wx.chooseImage({
  3. count: 3, // 默认9,假如传张
  4. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  5. sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
  6. success: function (res) {
  7. // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
  8. var tempFilePaths = res.tempFilePaths
  9. wx.previewImage({ //对应的图片预览
  10. current: temFilePaths[0], // 当前显示图片的链接
  11. urls: tempFilePaths||[] // 需要预览的图片http链接列表
  12. })
  13. wx.uploadFile({ //对应的图片上传
  14. url: 'http://example.weixin.qq.com/upload', //仅为示例,非真实的接口地址
  15. filePath: tempFilePaths[0],
  16. name:"file",
  17. formData:{ //上传的同时携带别的参数
  18. "user":"test"
  19. }
  20. success: function(res){
  21. var data = res.data
  22. //do something
  23. }
  24. })
  25. }
  26. })
  27. //数据请求js
  28. wx.request({
  29. url: 'test.php', //仅为示例,并非真实的接口地址
  30. data: { //注意你在这里上传图片url参数到后台后台是接收不到的,因为上面有专门上传图片的方法
  31. params1: '' ,
  32. params2: ''
  33. },
  34. header:{
  35. "Content-Type":"application/json"
  36. },
  37. success: function(res) {
  38. console.log(res.data)
  39. }
  40. })
  41. //数据储存js
  42. wx.setStorageSync("key","value") //设置要本地存储的key值
  43. wx.getStorageSync("key") //获取本地存储的key
  44. wx.clearStorageSync("key")

wepy框架安装及使用介绍

  1. 全局安装或更新WePY命令行工具
  2. npm install wepy-cli -g
  3. 在开发目录中生成Demo开发项目
  4. wepy init standard myproject
  5. cd myproject
  6. npm install
  7. wepy build --watch(启动项目)
  8. 组件名后缀 .wpy
  9. 组件页面结构与vue结构一样
  10. page页面实例 export default class MyPage extends wepy.page { }
  11. Component组件实例 export default class MyPage extends wepy.component { }

循环组件 repeat

  1. <!--wepy结构-->
  2. <style type="scss">
  3. </style>
  4. <template>
  5. <button bindtap="showFirstComponent">按钮</button>
  6. <view v-if="show">
  7. <DemoCom></DemoCom> <!--使用组件-->
  8. </view>
  9. <repeat for="{
  10. {arr}}" key="index"> <!--循环组件-->
  11. <DemoCom :passdata="item" /> <!--传值-->
  12. <repeat>
  13. </template>
  14. <script>
  15. import wepy from 'wepy'
  16. import DemoComponent from '../components/demoComponent' //比如说这里通过路径引人了demoComponent组件
  17. export default class pageDemo extends wepy.page {
  18. config = {
  19. 'navigationBarTitleText': '页面标题',
  20. 'navigationBarTextStyle': '#FFFFFF', //头部背景色
  21. 'navigationBarBackgroundColor': '#0386FF' //头部字体颜色
  22. };
  23. components = { //注册引入的组件
  24. DemoCom:DemoComponent
  25. };
  26. data = {
  27. show:true,
  28. arr:[
  29. {name:'aa',age:'16'},
  30. {name:'bb',age:'17'},
  31. {name:'cc',age:'c18'}
  32. ]
  33. };
  34. methods = {
  35. showFirstComponent(){ //bindtap里面的事件
  36. this.show=!this.show; //在这里data数据的设置、获取与vueJS里面的设置、获取一样
  37. }
  38. };
  39. onLoad(){
  40. };
  41. onShow(){
  42. }
  43. </script>
  44. <style>
  45. .mainBgcolor{ /*全局样式全局用*/
  46. background:#ffffff;
  47. }
  48. </style>
  49. <script>
  50. import wepy from 'wepy'
  51. import 'wepy-async-function'
  52. import { aldstat } from './utils/ald-stat'
  53. export default class extends wepy.app {
  54. config={
  55. pages: [ //这里注册的全是pages里面建立的pages.wpy组件,页面之间跳转
  56. 'pages/index',
  57. 'pages/login',
  58. 'pages/companyDetailInfo',
  59. ],
  60. window: {
  61. backgroundTextStyle: 'light',
  62. navigationBarBackgroundColor: '#fff',
  63. navigationBarTitleText: 'WeChat',
  64. navigationBarTextStyle: 'black'
  65. }
  66. }
  67. globalData = { //全局data 全局用
  68. userInfo: null
  69. }
  70. </script>

image.png

  1. <child title="mytitle"></child>
  2. // child.wpy,静态传值
  3. props = {
  4. title: String
  5. };
  6. onLoad () {
  7. console.log(this.title); // mytitle
  8. }

props动态传值是指父组件向子组件传递动态数据内容,父子组件数据完全独立互不干扰。

  1. // parent.wpy
  2. <child :title="parentTitle" :syncTitle.sync="parentTitle" :twoWayTitle="parentTitle"></child>
  3. data = {
  4. parentTitle: 'p-title'
  5. };
  6. // child.wpy
  7. props = {
  8. // 静态传值
  9. title: String,
  10. // 父向子单向动态传值
  11. syncTitle: {
  12. type: String,
  13. default: 'null'
  14. },
  15. twoWayTitle: {
  16. type: String,
  17. default: 'nothing',
  18. twoWay: true
  19. }
  20. };
  21. onLoad () {
  22. console.log(this.title); // p-title
  23. console.log(this.syncTitle); // p-title
  24. console.log(this.twoWayTitle); // p-title
  25. this.title = 'c-title';
  26. console.log(this.$parent.parentTitle); // p-title.
  27. this.twoWayTitle = 'two-way-title';
  28. this.$apply();
  29. console.log(this.$parent.parentTitle); // two-way-title. --- twoWay为true时,子组件props中的属性值改变时,会同时改变父组件对应的值
  30. this.$parent.parentTitle = 'p-title-changed';
  31. this.$parent.$apply();
  32. console.log(this.title); // 'c-title';
  33. console.log(this.syncTitle); // 'p-title-changed' --- 有.sync修饰符的props属性值,当在父组件中改变时,会同时改变子组件对应的值。
  34. }

mini-program
勘探-微信小程序

  1. app.json: 全局配置--(小程序公共设置)
  2. app.js: 全局配置--(小程序逻辑)
  3. app.wxss: 全局配置--(小程序公共样式)
  4. pages: 页面数组--(小程序可单独有自己的配置、样式、逻辑文件,还有一个页面结构文件)

image.png

  1. wx:key 指定列表中项目的唯一的标识符。

import引用目前文件定义的模板

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

微信小程序wepy框架笔记

  1. // index.wpy
  2. <template>
  3. <view>
  4. <panel>
  5. <h1 slot="title"></h1>
  6. </panel>
  7. <counter1 :num="myNum"></counter1>
  8. <counter2 :num.sync="syncNum"></counter2>
  9. <list :item="items"></list>
  10. </view>
  11. </template>
  12. <script>
  13. import wepy from 'wepy';
  14. import List from '../components/list';
  15. import Panel from '../components/panel';
  16. import Counter from '../components/counter';
  17. export default class Index extends wepy.page {
  18. config = {
  19. "navigationBarTitleText": "test"
  20. };
  21. components = {
  22. panel: Panel,
  23. counter1: Counter,
  24. counter2: Counter,
  25. list: List
  26. };
  27. data = {
  28. myNum: 50,
  29. syncNum: 100,
  30. items: [1, 2, 3, 4]
  31. }
  32. }
  33. </script>
  34. project
  35. ├── pages
  36. | ├── index
  37. | | ├── index.json index 页面配置
  38. | | ├── index.js index 页面逻辑
  39. | | ├── index.wxml index 页面结构
  40. | | └── index.wxss index 页面样式表
  41. | └── log
  42. | ├── log.json log 页面配置
  43. | ├── log.wxml log 页面逻辑
  44. | ├── log.js log 页面结构
  45. | └── log.wxss log 页面样式表
  46. ├── app.js 小程序逻辑
  47. ├── app.json 小程序公共设置
  48. └── app.wxss 小程序公共样式表
  49. project
  50. └── src
  51. ├── pages
  52. | ├── index.wpy index 页面配置、结构、样式、逻辑
  53. | └── log.wpy log 页面配置、结构、样式、逻辑
  54. └──app.wpy 小程序配置项(全局样式配置、声明钩子等)

dist 微信开发者工具指定的目录

  1. ├── node_modules
  2. ├── src 代码编写的目录
  3. | ├── components 组件文件夹(非完整页面)
  4. | | ├── com_a.wpy 可复用组件 a
  5. | | └── com_b.wpy 可复用组件 b
  6. | ├── pages 页面文件夹(完整页面)
  7. | | ├── index.wpy 页面 index
  8. | | └── page.wpy 页面 page
  9. | └── app.wpy 小程序配置项(全局样式配置、声明钩子等)
  10. └── package.json package 配置

支持props、data、computed、components、methods、watch(wepy中是watcher), 但wepy中的methods仅可用于页面事件绑定,其他自定义方法都要放在外层,而VUE中所有方法均放在 methods下

wepy中props传递需要加上.sync修饰符
props后要执行this.$apply()方法才能更新

wepy支持数据双向绑定
子组件在定义props时加上twoway:true属性值即可实现子组件修改父组 件数据

推荐使用eventBus方式进行组件通信,而在wepy中是通过broadcast,emit,$invoke 三种方法实现通信

wepy仅支持小程序的生命周期:onLoad、onReady等

lang决定了其代码编译过程,src决定是否外联代码,存在src属性且有效时,会忽略内联代码

普通组件引用

  1. <template>
  2. <!-- 以`<script>`脚本部分中所声明的组件ID为名命名自定义标签,从而在`<template>`模板部分中插入组件 -->
  3. <child></child>
  4. </template>
  5. <script>
  6. import wepy from 'wepy';
  7. //引入组件文件
  8. import Child from '../components/child';
  9. export default class Index extends wepy.component {
  10. //声明组件,分配组件id为child
  11. components = {
  12. child: Child
  13. };
  14. }
  15. </script>

组件的循环渲染

  1. <template>
  2. <!-- 注意,使用for属性,而不是使用wx:for属性 -->
  3. <repeat for="{
  4. {list}}" key="index" index="index" item="item">
  5. <!-- 插入<script>脚本部分所声明的child组件,同时传入item -->
  6. <child :item="item"></child>
  7. </repeat>
  8. </template>
  9. <template>
  10. <repeat for="{
  11. {banners}}">
  12. <child :item="item"></child>
  13. <repeat>
  14. </template>

computed 计算属性
watcher 监听器

  1. data = {
  2. a: 1
  3. }
  4. // 计算属性aPlus,在脚本中可通过this.aPlus来引用,在模板中可通过{
  5. { aPlus }}来插值
  6. computed = {
  7. aPlus () {
  8. return this.a + 1
  9. }
  10. }
  11. data = {
  12. num: 1
  13. }
  14. // 监听器函数名必须跟需要被监听的data对象中的数值属性num同名,
  15. // 其参数中的newValue为数值属性改变后的新值,oldValue为改变前的旧值
  16. watch = {
  17. num (newValue, oldValue) {
  18. console.log(`num value: ${oldValue} -> ${newValue}`)
  19. }
  20. }
  21. // 每当被监听的数值属性num改变一次,对应的同名监听器函数num()就被自动调用执行一次
  22. onLoad () {
  23. setInterval(() => {
  24. this.num++;
  25. this.$apply();
  26. }, 1000)
  27. }

emit emit与broadcast正好相反,事件发起组件的所有祖先组件会依次接收到emit事件。

  1. 比如,想在页面Page_Index中调用组件ComA的某个方法:
  2. this.$invoke('ComA', 'someMethod', 'someArgs');
  3. 1
  4. 如果想在组件ComA中调用组件ComG的某个方法:
  5. this.$invoke('./../ComB/ComG', 'someMethod', 'someArgs');
  6. .default: 绑定小程序冒泡型事件,如bindtap,.default后缀可省略不写;
  7. .stop: 绑定小程序捕获型事,如catchtap
  8. .user: 绑定用户自定义组件事件,通过$emit触发。
  9. // index.wpy
  10. <template>
  11. <child @childFn.user="parentFn"></child>
  12. </template>
  13. <script>
  14. import wepy from 'wepy'
  15. import Child from '../components/child'
  16. export default class Index extends wepy.page {
  17. components = {
  18. child: Child
  19. }
  20. methods = {
  21. parentFn (num, evt) {
  22. console.log('parent received emit event, number is: ' + num)
  23. }
  24. }
  25. }
  26. </script>
  27. // child.wpy
  28. <template>
  29. <view @tap="tap">Click me</view>
  30. </template>
  31. <script>
  32. import wepy from 'wepy'
  33. export default class Child extends wepy.component {
  34. methods = {
  35. tap () {
  36. console.log('child is clicked')
  37. this.$emit('childFn', 100)
  38. }
  39. }
  40. }
  41. </script>
  42. // mixins/test.js
  43. import wepy from 'wepy';
  44. export default class TestMixin extends wepy.mixin {
  45. data = {
  46. foo: 'foo defined by page',
  47. bar: 'bar defined by testMix'
  48. };
  49. methods: {
  50. tap () {
  51. console.log('mix tap');
  52. }
  53. }
  54. }
  55. // pages/index.wpy
  56. import wepy from 'wepy';
  57. import TestMixin from './mixins/test';
  58. export default class Index extends wepy.page {
  59. data = {
  60. foo: 'foo defined by index'
  61. };
  62. mixins = [TestMixin ];
  63. onShow() {
  64. console.log(this.foo); // foo defined by index.
  65. console.log(this.bar); // foo defined by testMix.
  66. }
  67. }

请点赞!因为你的鼓励是我写作的最大动力!

官方微信公众号

吹逼交流群:711613774

吹逼交流群

发表评论

表情:
评论列表 (有 0 条评论,431人围观)

还没有评论,来说两句吧...

相关阅读

    相关 前端技术前沿10

    允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NP