npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

miniapp-page-assign

v0.0.6

Published

A simple miniapp page assign.

Downloads

8

Readme

微信小程序注册页面中间件

Install

npm install miniapp-page-assign

Usage

由于微信小程序的import模块从node_modules目录引入文件会有问题,可以直接下载miniapp-page-assign.js(build目录下)放到/utils文件夹下。

In app.js

import {setLaunchInfo, pageAssign} from './utils/miniapp-page-assign';
App({
  mixin: [],
  onShow: function (options) {
    // 保存进入页面的信息
    setLaunchInfo(options);
    // ...other code
  },
  onLaunch: function () {
    // 注册simpleAssign到wx全局
    wx.pageAssign = pageAssign;
    // ...other code
  }
  // ...other code
});

In index/index.js (或者任意小程序页面)

Page(new wx.pageAssign({
  data: {
    
  },
  // 微信注册页面生命周期函数、事件处理函数
  // 包括onLoad, onShow, onReady, onHide, onUnload, onPullDownRefresh, onReachBottom, onShareAppMessage, onPageScroll, onTabItemTap
  onLoad: funtion (options) {
  },
  // others
  methods: {
    // 自定义事件
  }
}));

API

使用this.$data代理this.data

// 原生小程序语法:
this.setData({key: 'value'});
// 中间件用法:
this.$data.key = 'value';

使用this.$route访问页面路由信息

访问当前route可以得到当前的页面路由,传参和上一个页面的路由

在app.js中调用的 setLaunchInfo(options); 是很重要的一步,它用于保存用户进入小程序的场景值、shareTicket等信息

// other code
onLoad () {
  console.log(this.$route.path) //当前小程序页面路径
  console.log(this.$route.query)  //当前小程序页面参数
  console.log(this.$route.formPath)  //上一个小程序页面路径
  console.log(this.$route.fromQuery)  //上一个小程序页面参数
  
  // 以下几个如果没有在app.js中调用setLaunchInfo则不存在
  console.log(this.$route.scene)  // 进入页面场景值
  console.log(this.$route.shareTicket) // 进入页面带上的shareTicket
  console.log(this.$route.referrerInfo) // 进入小程序带上的卡券信息
  // other code
},

Tip

  • 页面跳转的两个页面必须都使用wx.pageAssign注册
  • 页面场景值,shareTicket,卡券信息等只会在特殊的情况进入小程序才会获得,具体参考小程序文档

使用mixin

在框架中,允许使用mixin引用外部定义的公共数据和方法

// common.js
export default {
  data: {
    hello: 'hello world'
  },
  methods: {
    sayHello: function () {
      console.log(this.$data.hello);
    }
  }
}

// index.js
import commonMixin from 'common';
Page(new wx.pageAssign({
  mixin: [commonMixin],
  data: {
    demoVal: 'demo',
    demoObj: {
      val: 'demoObj'
    },
    FibonacciArr: []
  },
  onLoad () {
    this.sayHello();
    // other code
  },
}));

this.onModel方法双向绑定数据

在页面标签上添加data-key和data-value,然后在触发更新的事件上绑定onModel方法,一些原生组件则不需要添加data-value,具体用法如下

<!-- index.wxml -- >
<view>测试数据:{{demoVal}}</view>  

<input 
  value="{{demoVal}}" 
  data-key="demoVal" 
  bindinput="onModel"></input>

<textarea
  value="{{demoVal}}" 
  data-key="demoVal" 
  bindinput="onModel"></textarea>

<button 
  data-key="demoVal" 
  data-value="hello world" 
  bindtap="onModel">设置value为“hello world”</button>
  
<view>测试数据2:{{demoObj.val}}</view>  

<input 
  class="border"
  value="{{demoObj.val}}" 
  data-key="demoObj.val" 
  bindinput="onModel"></input>
// index.js
data: {
  demoVal: 'demo',
  demoObj: {
    val: 'demoObj'
  }
}

Introduction

为什么使用它? 如果你是使用的原生小程序做开发,使用miniapp-page-assign,你可以获得以下好处

无需重新选择其他架构,比如mpvue

如果你的小程序使用原生小程序开发到一半,此时你重构使用mpvue可能成本过高,或者使用新的框架会有很多坑。但如果是构建新项目,还是推荐mpvue,毕竟好用的多。

可以即插即用,并不影响原生小程序的结构和用法

this.$data使用的是Proxy对象代理this.data,它可以和this.setData共存。并且你可以在新的页面引入和使用这套中间件(但是路由信息需要手动控制)。

对整个页面的生命周期或方法进行了一次封装

这将是一个巨大的好处,比如分享,你甚至可以在所有的页面定制同一个分享内容,或者根据参数定制分享内容,而无需在每一个小程序页面定制onShareAppMessage方法,只要你稍稍阅读一下源码就能发现其中的好处。比如你想要在所有的页面分享调用微信的自定义数据统计,你也可以直接在源码中修改。

使用mixin

mixin允许你从外部引入一些公用的data和methods,这将大大的减少代码量,因为你可以抽取很多的公用方法。

更多功能

正在整理开发中

欢迎拍砖

请轻拍~