• wepy


    wepy
    wepy优势:


    1、基于原生组件实现组件化开发
    2、同vue一样,支持watch、computed、mixin等开发

    3、同vue一样支持模块开发、组件开发等


    wepy与小程序页面的区别:


    同原生小程序不同,WePY拥有的是.wpy页面,而它们并非是继承自原生的 Page 和 App,也不需要独立的wxss、.js、.json等文件

    WePY小程序被分为三个实例:小程序实例App、页面实例Page、组件实例Component,它们实例化的方式基本相同:

    // 声明一个App小程序实例
    export default class MyAPP extends wepy.app { }

    // 声明一个Page页面实例

    export default class IndexPage extends wepy.page { }

    // 声明一个Component组件实例

    export default class MyComponent extends wepy.component { }

    注:在实例化过程中,需要在script中引入WePY

    import wepy from 'wepy'

    在page或component中,可以通过this.$parent来访问App实例中的方法或变量


    WePY在循环渲染组建时,与原生不同的是,外部需要包裹特有的辅助标签repeat


    同vue相同,WePY可以进行父子组建间传值

    wepy.component基类提供$broadcast$emit$invoke三个方法用于组件之间的通信和交互

    新版的WePY页面内引入组建的方式,与1.X版本的import不同,2.X保留了原生的 usingComponents 方式,不再使用 import 的方式导入。

    $broadcast事件是由父组件发起,所有子组件都会收到此广播事件,除非事件被手动取消。事件广播的顺序为广度优先搜索顺序
    $emit$broadcast正好相反,事件发起组件的所有祖先组件会依次接收到$emit事件

    $invoke是一个页面或组件对另一个组件中的方法的直接调用,通过传入组件路径找到相应的组件,然后再调用其方法

    interceptor 拦截器

    WePY可以使用全局拦截器对原生API的请求进行拦截
    具体方法是配置API的config、fail、success、complete回调函数

    export default class extends wepy.app {
        constructor () {
            // this is not allowed before super()
            super();
            // 拦截request请求
            this.intercept('request', {
                // 发出请求时的回调函数
                config (p) {
                    // 对所有request请求中的OBJECT参数对象统一附加时间戳属性
                    p.timestamp = +new Date();
                    console.log('config request: ', p);
                    // 必须返回OBJECT参数对象,否则无法发送请求到服务端
                    return p;
                },
    
                // 请求成功后的回调函数
                success (p) {
                    // 可以在这里对收到的响应数据对象进行加工处理
                    console.log('request success: ', p);
                    // 必须返回响应数据对象,否则后续无法对响应数据进行处理
                    return p;
                },
    
                //请求失败后的回调函数
                fail (p) {
                    console.log('request fail: ', p);
                    // 必须返回响应数据对象,否则后续无法对响应数据进行处理
                    return p;
                },
    
                // 请求完成时的回调函数(请求成功或失败都会被执行)
                complete (p) {
                    console.log('request complete: ', p);
                }
            });
        }
    }
    

      

    数据绑定:

    因为小程序架构本身原因,页面渲染层和JS逻辑层分开的,setData操作实际就是JS逻辑层与页面渲染层之间的通信

    而WePY使用脏数据检查对setData进行封装,在函数运行周期结束时执行脏数据检查,一来可以不用关心页面多次setData是否会有性能上的问题,二来可以更加简洁去修改数据实现绑定,不用重复去写setData方法

    原生小程序数据修改变量:

      this.setData({title: 'this is title'})

    wepy数据修改变量:

      this.title = 'this is title'

    需要注意的是:WePY在异步函数中更新数据的时候,必须手动调用$apply方法,才会触发脏数据检查流程的运行

    setTimeout(() => {

      this.title = 'this is title';

      this.$apply();

    }, 3000);

    page实例与component实例:

    由于Page页面实际上继承自Component组件,即Page也是组件。除扩展了页面所特有的config配置以及特有的页面生命周期函数之外,其它属性和方法与Component一致

    import wepy from 'wepy';
    
    export default class MyPage extends wepy.page {
    // export default class MyComponent extends wepy.component {
        customData = {}  // 自定义数据
    
        customFunction () {}  //自定义方法
    
        onLoad () {}  // 在Page和Component共用的生命周期函数
    
        onShow () {}  // 只在Page中存在的页面生命周期函数
    
        config = {};  // 只在Page实例中存在的配置数据,对应于原生的page.json文件
    
        data = {};  // 页面所需数据均需在这里声明,可用于模板数据绑定
    
        components = {};  // 声明页面中所引用的组件,或声明组件中所引用的子组件
    
        mixins = [];  // 声明页面所引用的Mixin实例
    
        computed = {};  // 声明计算属性(详见后文介绍)
    
        watch = {};  // 声明数据watcher(详见后文介绍)
    
        methods = {};  // 声明页面wxml中标签的事件处理函数。注意,此处只用于声明页面wxml中标签的bind、catch事件,自定义方法需以自定义方法的方式声明
    
        events = {};  // 声明组件之间的事件处理函数
    }
    

      注意,对于WePY中的methods属性,因为与Vue中的使用习惯不一致,非常容易造成误解,这里需要特别强调一下:WePY中的methods属性只能声明页面wxml标签的bind、catch事件,不能声明自定义方法,这与Vue中的用法是不一致的,普通自定义方法在methods对象外声明,与methods平级

    持续更新...

  • 相关阅读:
    饿了么ElementUI table遇到的问题
    Window命令行杀进程
    网络监控流量工具
    记一次Linux系统被入侵的过程
    sftp ftp文件同步方案
    清除oracle归档日志
    TCP连接复用
    Sftp搭建与配置参考
    setfacl命令
    tips
  • 原文地址:https://www.cnblogs.com/tongjiaojiao/p/11491394.html
Copyright © 2020-2023  润新知