GithubHelp home page GithubHelp logo

tvfe / wxpage Goto Github PK

View Code? Open in Web Editor NEW
622.0 26.0 97.0 189 KB

WXPage 是一个极其轻量的微信小程序开发框架,其中的API蕴含了“极致页面打开速度的**”,为可维护性与开发效率而设计的功能,框架来自“腾讯视频”小程序的项目沉淀,框架对于小程序工程理念为不依赖额外构建,即引即用。腾讯视频播放器插件 =>

Home Page: https://github.com/tvfe/txv-miniprogram-plugin

License: MIT License

JavaScript 100.00%
wxpage miniapp

wxpage's Issues

库中无用代码的优化

如果正常页面做跳转是会调用brige.js里的route函数,函数如下:

function route ({type}) {
	// url: $page[?name=value]
	return function (url, config) {
		var parts = url.split(/\?/)
		var pagepath = parts[0]
		if (/^[\w\-]+$/.test(pagepath)) {
			pagepath = (conf.get('customRouteResolve') || conf.get('routeResolve'))(pagepath)
		}
		if (!pagepath) {
			throw new Error('Invalid path:', pagepath)
		}
		config = config || {}
		// append querystring
		config.url = pagepath + (parts[1] ? '?' + parts[1] : '')
		redirector[type](config)
	}

这个时候函数只传了一个参数config,我不清楚大大是怎么考虑的,但是route函数没有被bridge.js导出,而且整个脚本内调用回调函数的时候,都没有传入第二个参数,所以我可以认为config是在函数内被初始化,内只有一个对象url。(此处是建议更改的第一个部分,我猜大大可能因为relaunch这种大大说不兼容的api当时做了这个最后没用上成了幽灵代码,而且我也的确没明白reLaunch怎么不兼容)。

redirector里面的函数是这样的:

      exportee.navigateTo = function (cfg) {
        console.log(cfg, arguments);
        return route('navigateTo', cfg, arguments)
      }
      exportee.redirectTo = function (cfg) {
        return route('redirectTo', cfg, arguments)
      }
      exportee.switchTab = function (cfg) {
        return route('switchTab', cfg, arguments)
      }
      exportee.reLaunch = function (cfg) {
        return route('reLaunch', cfg, arguments)
      }
      exportee.navigateBack = function () {
        return wx.navigateBack.apply(wx, arguments)
      }

从刚才的分析来看,那么cfg就是传入的config参数,arguments是一个元素为1的数组。aruments[0]===config,所以这里是第二个我没明白的地方,argument意义何在?

我加了一行在里面跑了一下,这个时候神奇的部分就来了。(因为我也不知道为什么)

      exportee.navigateTo = function (cfg) {
        console.log(cfg);
        console.log(arguments);
        return route('navigateTo', cfg, arguments)
      }

控制台打出:

config是

{url:"/module/....(后面我省略了)"}

arguments是

{
  0: {url:"module/....(后面我省略了)"}
  _proto_: ....
}

url前面的/不见了,所以这就是QQ会报错navigateTo:fail page "module/module1?From=%E9%A6%96%E9%A1%B5&aim=FAQ7&depth=1" is not found的原因。

所以我想请问这是什么问题?argument的特性么?

我已经查出来了,这TM是模拟器的问题。

请问extendPageBefore和extendPageAfter的区别以及注意事项?

目前框架应该是在小程序载入,先执行APP的onLuanch和onShow,首屏onload之前就会执行主包的扩展,之后执行所有主包的onPageLaunch,之后是首屏的onload?在触发分包界面的时侯先执行分包的扩展,之后执行所有分包页的onPageLaunch,然后是分包对应界面的周期函数?

请问我上面说的对么?

所以这两个方法的具体执行时间是什么时候呢?我感觉不到这两个方法有什么区别啊

补充:灵机一动,是一个不会覆盖同名函数,一个会覆盖同名函数么?求大大现身说法。

this.$cache方法中不能调用$route么?

Page.P('index',{ onLoad(){ let that = this; // 异步读 this.$cache.get('page_data', function (err, data) { // success or fail if (err) { that.$route('setting') } else { console.log('Get data success', data) } }) } })

关于template 和 组件

请问你们对组件的描述怎么包含官方文档中所提到的 template 和 组件,这两者不是不同的概念吗

大大,组件调用有点问题

定义了一个弹层的组件
在pageAd页面引用了,点击调用没问题,然后调用了$route,打开了pageB,点击调用也没问题,从pageB返回到pageA后,pageA点击就调用不了

大大,代码有两处好像有点小问题

因为我们的项目是 很多目录层级这样,看之前的issues,似乎不太适合,因此想改改,看代码过程中有几点疑惑

大大 一个是 可能监听了无效事件,根源在redirector.route 方法永远只 emit navigateTo事件
因此在bridge也只emit navigateTo 事件,
因此 option.onNavigate 下 就 dispatcher.on('navigateTo:'+name, onNavigateHandler) 起作用,虽然不影响,因为反正都执行


还有就是 component 下 ,那个name 感觉是 undefined,

function component(def) {
if (!def) {
	// ERROR name is underfined
	console.error(`Illegal component options [${name || 'Anonymous'}]`)
	def = {}
}

component.js 中 bridge.ref(component.getRef) 和 page.js 下bridge.ref(C.getRef) 是不是重复了


message.js 下 assign

  ['on', 'off', 'wait', 'emit', 'assign']

执行到 wait应该是undefined,不晓得,我猜的


还有大大, 下面的代码这种写法看不懂 brideg.js的route

pagepath = (conf.get('customRouteResolve') || conf.get('routeResolve'))(pagepath)

关于SessionKey的问题

  1. 得到的session_id是存储在全局数据中还是本地缓存中比较好?
  2. session_id的有效期是多长呢?

实现预加载有问题***

当第一个页面调用preload的时候会提前加载第二个页面的数据?那如果当已经跳转到第二个页面时,预加载的数据还没有完全读取完毕,怎么办?是不是还得从头开始走一遍第二个页面的读取逻辑?有没有什么办法能让它读完呢?

个人原因

代码片段

请问一下我这个问题出在哪?

补充:似乎我往下切基础库版本也不行了.....?我记得以前是好使的?大概有几个月没碰小程序了。。。。

再补充:心态崩了,在我的项目上,是模拟器好使,而真机不行。新建这个代码片段是哪个都不好使......
我传指针这个操作应该没问题啊?

再再补充:
我记得小程序进入界面在onLoad之前不是会执行一次深拷贝么?
所以问题是不是出现在......onNagivate的同时页面就已经执行页面对象的深拷贝了?我记得老版本的小程序对this的赋值是有效的啊?

onAwake 函数内部 this 为null

如题 ,page页面内部 onAwake this 显示null;

另外page里面有个onAppShow, 这个函数只有当前页面从后台切换前台才会执行,和onAwake功能重叠了?

想请教下,如何扩展的生命周期

项目中有一个需求,我想扩展下生命周期来完成,想请教下你是如何实现扩展生命周期的,代码没看懂,不知道方便回答下吗?

最新版的有个小BUG

在组件里执行vm.$data().xxxx无法获取数据,直接报错。
我在wxpage.js优化了下代码就都正常了,具体看截图。
原本是ctx[cid],调整之后的代码为ctx.data[cid] || {}
image

不同page 可能有相同函数功能

小程序页面简单,不同页面可能会有部分相同的函数功能和部分相同的html(类似小程序template),单纯封装成组件,又过度设计和时间不允许,是不是可以提供一个接口暴露出page某个函数可以被其他page使用~

我现在采用的办法是提取到一个公共的common文件中,需要用到再export出来,或者可以探讨下提取到common才是合理的,再去做暴露的功能也是过度设计!!

谢谢

this.$setData() 方法无效

按照文档引入dist代码:

var P = require('../lib/wxpage')
var Header = require('../comps/header')

P('index', {
	comps: [
		Header,
	],
	data: {
		userName: '张三'
	},
	onLaunch: function () {
		console.log('## On index page launch')	
		this.$setData({
			userName:  '李四'
		})
	}
})

onAppShow只执行一次

onAppShow 只在初始化页面时候调用一次,

image
看注释以及debug都不执行...
更改了调用了吗还是这边代码结构问题= =?

希望能够将以前的template与JS引入以实现动态组件引入添加回来

在demo版本里,组件是通过在html中import和在js中require实现的,这样的组件虽然没有后续官方新增的自定义组件中很强的生命周期与配置选项(比如样式隔离,函数作用域的改变)但是却可以利用template的is动态特性动态根据自身逻辑按照用户需要动态引入template并进行渲染。现在改成官方的自定义组件后,组件只能在开发的时候写死,没法现场进行动态引入了,所以大大能不能恢复一下以前的component,以实现动态组件引入?

大大,组件中(┬_┬) 有地方不太明白

最近在看大大的代码,想学习学习,用在自己的小程序,遇到了不明白的地方

<custom-component binding="$" ref="customComp"/>

大大上面那个,我在代码 component.js 找到了 对ref的地方

var refs = {}
def.attached = fns.wrapFun(def.attached, function () {
	var id = ++cid
	this.$id = id
	refs[id] = this
	this._$ref = this.properties.ref || this.properties._ref
	this.triggerEvent('ing', {
		id: this.$id,
		type: 'attached'
	})
})

似乎是给组件定义来一个 properties为ref,存为this。

但是不明白的地方是

这个 binding=“$” 是做什么,我搜了下那几个文件,没找到

wxpage会不会再来个类似webpack的工具,用来单页面

主要是,json,js,css写三个文件还是有点麻烦,之后会不会出
还有就是我想问问腾讯谷雨和腾讯视频体验起来很不一样,感觉腾讯谷雨加载起来很快,很流畅,腾讯视频可能是因为功能太多了,在卡一点的手机上,谷雨要流畅很多,想问问谷雨有什么优化吗

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.