前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端技术前沿3

前端技术前沿3

作者头像
达达前端
发布2019-07-03 10:33:13
3540
发布2019-07-03 10:33:13
举报
文章被收录于专栏:达达前端达达前端

wepy框架

全局安装wepy: npm i -g wepy-cli

初始化项目: wepy init standard myproject

切换到项目目录: cd myproject

安装依赖: npm install

wepy框架是腾讯内部基于小程序的开发框架

代码语言:javascript
复制
/index.js

//获取应用实例

var app = getApp()

Page({

   data: {

       motto: 'Hello World',

       userInfo: {}

   },

   //事件处理函数

   bindViewTap: function() {

       console.log('button clicked')

   },

   onLoad: function () {

       console.log('onLoad')

   }

})

基于wepy的实现

代码语言:javascript
复制
import wepy from 'wepy';

 

export default class Index extends wepy.page {

 

   data = {

       motto: 'Hello World',

       userInfo: {}

   };

   methods = {

       bindViewTap () {

           console.log('button clicked');

       }

   };

   onLoad() {

       console.log('onLoad');

   };

}
代码语言:javascript
复制
// index.wpy

<template>

   <view>

       <panel>

           <h1 slot="title"></h1>

       </panel>

       <counter1 :num="myNum"></counter1>

       <counter2 :num.sync="syncNum"></counter2>

       <list :item="items"></list>

   </view>

</template>

<script>

import wepy from 'wepy';

import List from '../components/list';

import Panel from '../components/panel';

import Counter from '../components/counter';

 

export default class Index extends wepy.page {

 

   config = {

       "navigationBarTitleText": "test"

   };

   components = {

       panel: Panel,

       counter1: Counter,

       counter2: Counter,

       list: List

   };

   data = {

       myNum: 50,

       syncNum: 100,

       items: [1, 2, 3, 4]

   }

}

</script>

image.png

wepy中的生命周期 onLoad,onReady,onShow,onPrefetch等,其中onReady,onShow,onPrefetch只有wepy.page中才有用。

代码语言:javascript
复制
官方案例:
// parent.wpy
<child :title = 'parentTitle' :syncTitle.sync = 'parentTitle' :twoWayTitle = 'parentTitle'></child>
在script中的设置
data = {
    parentTitle: 'p-title'
}

// child.wpy
props = {
    // 静态传值
    title: String,

    // 父向子单向动态传值
    syncTitle: {
        type: String,
        default: 'null'
    },

    twoWayTitle: {
        type: Number,
        default: 'nothing',
        twoWay: true
    }
};

onLoad () {
    console.log(this.title); // p-title
    console.log(this.syncTitle); // p-title
    console.log(this.twoWayTitle); // p-title

    this.title = 'c-title';
    console.log(this.$parent.parentTitle); // p-title.
    this.twoWayTitle = 'two-way-title';
    this.$apply();
    console.log(this.$parent.parentTitle); // two-way-title.  --- twoWay为true时,子组件props中的属性值改变时,会同时改变父组件对应的值
    this.$parent.parentTitle = 'p-title-changed';
    this.$parent.$apply();
    console.log(this.title); // 'c-title';
    console.log(this.syncTitle); // 'p-title-changed' --- 有.sync修饰符的props属性值,当在父组件中改变时,会同时改变子组件对应的值。
}
代码语言:javascript
复制
parent.wpy
<template>
    <view>
        <children @childFun.user = 'someEvent'></children>
    </view>
</template>
<script>
export default class Parent extends wepy.page{
    data = {
        name: 'parent'
    }
    events = {
        'some-event': (p1, p2, p3, $event) => {
            //  输出为'parent receive some-event children',$event.source指向子组件。
            console.log(`${this.name} receive ${$event.name} from ${$event.source.name}`)
        }
    }
    onLoad () {
            this.$broadcast('getIndex', 1, 4)
    }
    methods = {
        someEvent (...p) {
            // 输出[1, 2, 3, _class]。
            console.log(p)
        }
    }
}
</script>

children.wpy
<script>
export default class Parent extends wepy.page{
    data = {
        name: 'children'
    }
    onLoad () {
        // this.$emit('some-event', 1, 2, 3)
        // 触发组件中的自定义事件
        this.$emit('childFun', 1, 2, 3)
    }
    events = {
        'getIndex': (...p) => {
            console.log(p)        // 输出[1, 4]
        }
    }
}
在父组件中给子组件添加属性@childFun.user = 'someEvent'后,在子组件中修改触发条件this.$emit('childFun', 1, 2, 3)


//$invoke
父组件向子组件发送事件:
使用import导入子组件后,在使用时可以直接通过
this.$invoke('子组件,必须要单引号括起来', '子组件方法名称',  param1,param2,param3.......);
子组件间发送事件:
this.$invoke('子组件的相对路径', '子组件方法名称',  param1,param2,param3.......);
子组件的相对路径的理解: 当设置'./'即当前组件,'../'为父组件,以此类推。它可以指定向哪一个组件分发内容,但只适用于简单的组件树结构,复杂的结构考虑使用redux。
代码语言:javascript
复制
// mixin.js
export default class TestMixin extends wepy.mixin {
    data = {
        foo: 'foo defined by page',
        bar: 'bar defined by testMix'
    };
    methods: {
    tap () {
      console.log('mix tap');
    }
  }
}
....
import wepy from 'wepy';
import TestMixin from './mixins/test';
export default class Index extends wepy.page {
    data = {
        foo: 'foo defined by index'
    };
    mixins = [TestMixin ];
    onShow() {
        console.log(this.foo); // foo defined by index
        console.log(this.bar); // bar defined by testMix
    }
}
代码语言:javascript
复制
// mixin.js
export default class TestMixin extends wepy.mixin {
    onLoad () {
        console.log(2222)
    }
}
....
import wepy from 'wepy';
import TestMixin from './mixins/test';
export default class Index extends wepy.page {
    data = {
        foo: 'foo defined by index'
    };
    mixins = [TestMixin ];
    onLoad() {
        console.log(11111); 
    }
}
结果打印为: 
2222
11111

wxs的使用

代码语言:javascript
复制
// 设置一个过滤器对超过10000的数字进行转化
module.exports = {
  filter: function (num) {
    if (num < 10000) {
      return num
    } else {
      var reNum = (num / 10000).toFixed(1) 
      return reNum + '万'
    }
  }
}
代码语言:javascript
复制
// template中使用过滤器,mywxs对应下方wxs中设置的key值
<view>{{mywxs.filter(mItem.playerCount)}}人</view>
.....
import mywxs from '@/wxs/fixed.wxs'
export default class Index extends wepy.page{
......
wxs = {
    mywxs: mywxs
}
.....
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档