提交 485715f1 编写于 作者: Q qiang

Merge branch 'dev' of github.com:dcloudio/uni-app into dev

...@@ -385,14 +385,21 @@ function wrapper$1 (event) { ...@@ -385,14 +385,21 @@ function wrapper$1 (event) {
return event return event
} }
function processEventArgs (event, args = [], isCustom) { function processEventArgs (event, args = [], isCustom, methodName) {
if (isCustom && !args.length) { // 无参数,直接传入 detail 数组 if (isCustom && !args.length) { // 无参数,直接传入 detail 数组
if (!Array.isArray(event.detail)) { // 应该是使用了 wxcomponent 原生组件,为了向前兼容,传递原始 event 对象
return [event]
}
return event.detail return event.detail
} }
const ret = []; const ret = [];
args.forEach(arg => { args.forEach(arg => {
if (arg === '$event') { if (arg === '$event') {
ret.push(isCustom ? event.detail[0] : event); if (methodName === '__set_model' && !isCustom) { // input v-model value
ret.push(event.target.value);
} else {
ret.push(isCustom ? event.detail[0] : event);
}
} else { } else {
ret.push(arg); ret.push(arg);
} }
...@@ -404,14 +411,6 @@ function processEventArgs (event, args = [], isCustom) { ...@@ -404,14 +411,6 @@ function processEventArgs (event, args = [], isCustom) {
const ONCE = '~'; const ONCE = '~';
const CUSTOM = '^'; const CUSTOM = '^';
function getTarget (obj, path) {
const parts = path.split('.');
if (parts.length === 1) {
return obj[parts[0]]
}
return getTarget(obj[parts[0]], parts.slice(1).join('.'))
}
function handleEvent (event) { function handleEvent (event) {
event = wrapper$1(event); event = wrapper$1(event);
...@@ -435,26 +434,17 @@ function handleEvent (event) { ...@@ -435,26 +434,17 @@ function handleEvent (event) {
if (eventsArray && eventType === type) { if (eventsArray && eventType === type) {
eventsArray.forEach(eventArray => { eventsArray.forEach(eventArray => {
const methodName = eventArray[0]; const methodName = eventArray[0];
if (methodName === '$set') { // prop.sync const handler = this.$vm[methodName];
const args = eventArray[1]; if (!isFn(handler)) {
if (args.length === 2) { // :title.sync="title" throw new Error(` _vm.${methodName} is not a function`)
this.$vm[args[0]] = event.detail[0]; }
} else if (args.length === 3) { if (isOnce) {
this.$vm.$set(getTarget(this.$vm, args[0]), args[1], event.detail[0]); if (handler.once) {
} return
} else {
const handler = this.$vm[methodName];
if (!isFn(handler)) {
throw new Error(` _vm.${methodName} is not a function`)
}
if (isOnce) {
if (handler.once) {
return
}
handler.once = true;
} }
handler.apply(this.$vm, processEventArgs(event, eventArray[1], isCustom)); handler.once = true;
} }
handler.apply(this.$vm, processEventArgs(event, eventArray[1], isCustom, methodName));
}); });
} }
}); });
...@@ -582,36 +572,48 @@ function createPage (vueOptions) { ...@@ -582,36 +572,48 @@ function createPage (vueOptions) {
VueComponent = Vue.extend(vueOptions); VueComponent = Vue.extend(vueOptions);
} }
const pageOptions = { const pageOptions = {
options: {
multipleSlots: true,
addGlobalClass: true
},
data: getData(vueOptions, Vue.prototype), data: getData(vueOptions, Vue.prototype),
onLoad (args) { lifetimes: { // 当页面作为组件时
attached () {
this.$vm = new VueComponent({ this.$vm = new VueComponent({
mpType: 'page', mpType: 'page',
mpInstance: this mpInstance: this
}); });
this.$vm.__call_hook('created'); this.$vm.__call_hook('created');
this.$vm.__call_hook('onLoad', args); // 开发者可能会在 onLoad 时赋值,提前到 mount 之前 this.$vm.$mount();
this.$vm.$mount(); },
}, ready () {
onReady () { this.$vm.__call_hook('beforeMount');
this.$vm._isMounted = true; this.$vm._isMounted = true;
this.$vm.__call_hook('mounted'); this.$vm.__call_hook('mounted');
this.$vm.__call_hook('onReady'); this.$vm.__call_hook('onReady');
}, },
onUnload () { detached () {
this.$vm.__call_hook('onUnload');
{
this.$vm.$destroy(); this.$vm.$destroy();
} }
}, },
__e: handleEvent, methods: { // 作为页面时
__l: handleLink onLoad (args) {
this.$vm.$mp.query = args; // 又要兼容 mpvue
this.$vm.__call_hook('onLoad', args); // 开发者可能会在 onLoad 时赋值,提前到 mount 之前
},
onUnload () {
this.$vm.__call_hook('onUnload');
},
__e: handleEvent,
__l: handleLink
}
}; };
initHooks(pageOptions, hooks$1); initHooks(pageOptions.methods, hooks$1);
return Page(pageOptions) return Component(pageOptions)
} }
function initVueComponent (mpInstace, VueComponent, extraOptions = {}) { function initVueComponent (mpInstace, VueComponent, extraOptions = {}) {
......
{ {
"name": "@dcloudio/uni-mp-weixin", "name": "@dcloudio/uni-mp-weixin",
"version": "0.0.918", "version": "0.0.922",
"description": "uni-app mp-weixin", "description": "uni-app mp-weixin",
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
......
...@@ -41,39 +41,52 @@ export function createPage (vueOptions) { ...@@ -41,39 +41,52 @@ export function createPage (vueOptions) {
VueComponent = Vue.extend(vueOptions) VueComponent = Vue.extend(vueOptions)
} }
const pageOptions = { const pageOptions = {
options: {
multipleSlots: true,
addGlobalClass: true
},
data: getData(vueOptions, Vue.prototype), data: getData(vueOptions, Vue.prototype),
onLoad (args) { lifetimes: { // 当页面作为组件时
if (__PLATFORM__ === 'mp-baidu') { attached () {
this.$baiduComponentInstances = Object.create(null) if (__PLATFORM__ === 'mp-baidu') {
} this.$baiduComponentInstances = Object.create(null)
}
this.$vm = new VueComponent({ this.$vm = new VueComponent({
mpType: 'page', mpType: 'page',
mpInstance: this mpInstance: this
}) })
this.$vm.__call_hook('created') this.$vm.__call_hook('created')
this.$vm.__call_hook('onLoad', args) // 开发者可能会在 onLoad 时赋值,提前到 mount 之前 this.$vm.$mount()
this.$vm.$mount() },
}, ready () {
onReady () { this.$vm.__call_hook('beforeMount')
this.$vm._isMounted = true this.$vm._isMounted = true
this.$vm.__call_hook('mounted') this.$vm.__call_hook('mounted')
this.$vm.__call_hook('onReady') this.$vm.__call_hook('onReady')
}, },
onUnload () { detached () {
this.$vm.__call_hook('onUnload')
if (__PLATFORM__ === 'mp-baidu') { // 百度组件不会在页面 unload 时触发 detached
baiduPageDestroy(this.$vm)
} else {
this.$vm.$destroy() this.$vm.$destroy()
} }
}, },
__e: handleEvent, methods: { // 作为页面时
__l: handleLink onLoad (args) {
this.$vm.$mp.query = args // 又要兼容 mpvue
this.$vm.__call_hook('onLoad', args) // 开发者可能会在 onLoad 时赋值,提前到 mount 之前
},
onUnload () {
this.$vm.__call_hook('onUnload')
if (__PLATFORM__ === 'mp-baidu') { // 百度组件不会在页面 unload 时触发 detached
baiduPageDestroy(this.$vm)
}
},
__e: handleEvent,
__l: handleLink
}
} }
initHooks(pageOptions, hooks) initHooks(pageOptions.methods, hooks)
return Page(pageOptions) return Component(pageOptions)
} }
...@@ -128,14 +128,21 @@ function wrapper (event) { ...@@ -128,14 +128,21 @@ function wrapper (event) {
return event return event
} }
function processEventArgs (event, args = [], isCustom) { function processEventArgs (event, args = [], isCustom, methodName) {
if (isCustom && !args.length) { // 无参数,直接传入 detail 数组 if (isCustom && !args.length) { // 无参数,直接传入 detail 数组
if (!Array.isArray(event.detail)) { // 应该是使用了 wxcomponent 原生组件,为了向前兼容,传递原始 event 对象
return [event]
}
return event.detail return event.detail
} }
const ret = [] const ret = []
args.forEach(arg => { args.forEach(arg => {
if (arg === '$event') { if (arg === '$event') {
ret.push(isCustom ? event.detail[0] : event) if (methodName === '__set_model' && !isCustom) { // input v-model value
ret.push(event.target.value)
} else {
ret.push(isCustom ? event.detail[0] : event)
}
} else { } else {
ret.push(arg) ret.push(arg)
} }
...@@ -147,14 +154,6 @@ function processEventArgs (event, args = [], isCustom) { ...@@ -147,14 +154,6 @@ function processEventArgs (event, args = [], isCustom) {
const ONCE = '~' const ONCE = '~'
const CUSTOM = '^' const CUSTOM = '^'
function getTarget (obj, path) {
const parts = path.split('.')
if (parts.length === 1) {
return obj[parts[0]]
}
return getTarget(obj[parts[0]], parts.slice(1).join('.'))
}
export function handleEvent (event) { export function handleEvent (event) {
event = wrapper(event) event = wrapper(event)
...@@ -178,26 +177,17 @@ export function handleEvent (event) { ...@@ -178,26 +177,17 @@ export function handleEvent (event) {
if (eventsArray && eventType === type) { if (eventsArray && eventType === type) {
eventsArray.forEach(eventArray => { eventsArray.forEach(eventArray => {
const methodName = eventArray[0] const methodName = eventArray[0]
if (methodName === '$set') { // prop.sync const handler = this.$vm[methodName]
const args = eventArray[1] if (!isFn(handler)) {
if (args.length === 2) { // :title.sync="title" throw new Error(` _vm.${methodName} is not a function`)
this.$vm[args[0]] = event.detail[0] }
} else if (args.length === 3) { if (isOnce) {
this.$vm.$set(getTarget(this.$vm, args[0]), args[1], event.detail[0]) if (handler.once) {
} return
} else {
const handler = this.$vm[methodName]
if (!isFn(handler)) {
throw new Error(` _vm.${methodName} is not a function`)
}
if (isOnce) {
if (handler.once) {
return
}
handler.once = true
} }
handler.apply(this.$vm, processEventArgs(event, eventArray[1], isCustom)) handler.once = true
} }
handler.apply(this.$vm, processEventArgs(event, eventArray[1], isCustom, methodName))
}) })
} }
}) })
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册