Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
luomor
uni-app
提交
8b93f24d
uni-app
项目概览
luomor
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8b93f24d
编写于
4月 03, 2020
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: init quickapp-light
上级
ad27f7ca
变更
21
展开全部
隐藏空白更改
内联
并排
Showing
21 changed file
with
2066 addition
and
35 deletion
+2066
-35
build/rollup.config.mp.js
build/rollup.config.mp.js
+2
-2
package.json
package.json
+4
-4
packages/uni-app-plus/dist/index.v3.js
packages/uni-app-plus/dist/index.v3.js
+40
-24
packages/uni-quickapp-light/dist/index.js
packages/uni-quickapp-light/dist/index.js
+1643
-0
packages/uni-quickapp-light/lib/assets/jsconfig.json
packages/uni-quickapp-light/lib/assets/jsconfig.json
+6
-0
packages/uni-quickapp-light/lib/uni.compiler.js
packages/uni-quickapp-light/lib/uni.compiler.js
+4
-0
packages/uni-quickapp-light/lib/uni.config.js
packages/uni-quickapp-light/lib/uni.config.js
+38
-0
packages/uni-quickapp-light/package.json
packages/uni-quickapp-light/package.json
+21
-0
packages/uni-template-compiler/__tests__/compiler-quickapp-light.spec.js
...mplate-compiler/__tests__/compiler-quickapp-light.spec.js
+31
-0
packages/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js
...vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js
+4
-4
packages/webpack-uni-pages-loader/lib/platforms/quickapp-light/index.js
...ck-uni-pages-loader/lib/platforms/quickapp-light/index.js
+24
-0
src/core/runtime/web-view/index.js
src/core/runtime/web-view/index.js
+5
-1
src/platforms/quickapp-light/runtime/api/index.js
src/platforms/quickapp-light/runtime/api/index.js
+0
-0
src/platforms/quickapp-light/runtime/api/protocols.js
src/platforms/quickapp-light/runtime/api/protocols.js
+7
-0
src/platforms/quickapp-light/runtime/api/providers.js
src/platforms/quickapp-light/runtime/api/providers.js
+16
-0
src/platforms/quickapp-light/runtime/index.js
src/platforms/quickapp-light/runtime/index.js
+1
-0
src/platforms/quickapp-light/runtime/web-view.js
src/platforms/quickapp-light/runtime/web-view.js
+32
-0
src/platforms/quickapp-light/runtime/wrapper/app-parser.js
src/platforms/quickapp-light/runtime/wrapper/app-parser.js
+27
-0
src/platforms/quickapp-light/runtime/wrapper/component-parser.js
...tforms/quickapp-light/runtime/wrapper/component-parser.js
+50
-0
src/platforms/quickapp-light/runtime/wrapper/page-parser.js
src/platforms/quickapp-light/runtime/wrapper/page-parser.js
+39
-0
src/platforms/quickapp-light/runtime/wrapper/util.js
src/platforms/quickapp-light/runtime/wrapper/util.js
+72
-0
未找到文件。
build/rollup.config.mp.js
浏览文件 @
8b93f24d
...
...
@@ -23,7 +23,7 @@ const PLATFORMS = {
prefix
:
'
tt
'
,
title
:
'
头条小程序
'
},
'
mp-quickapp
'
:
{
'
quickapp-light
'
:
{
prefix
:
'
qa
'
,
title
:
'
快应用(Light)版
'
},
...
...
@@ -64,4 +64,4 @@ module.exports = {
})
],
external
:
[
'
vue
'
]
}
}
package.json
浏览文件 @
8b93f24d
...
...
@@ -22,8 +22,8 @@
"build:mp-weixin"
:
"cross-env UNI_PLATFORM=mp-weixin rollup -c build/rollup.config.mp.js"
,
"build:mp-baidu"
:
"cross-env UNI_PLATFORM=mp-baidu rollup -c build/rollup.config.mp.js"
,
"build:mp-alipay"
:
"cross-env UNI_PLATFORM=mp-alipay rollup -c build/rollup.config.mp.js"
,
"build:mp-toutiao"
:
"cross-env UNI_PLATFORM=mp-toutiao rollup -c build/rollup.config.mp.js"
,
"build:
mp-quickapp"
:
"cross-env UNI_PLATFORM=mp-quickapp
rollup -c build/rollup.config.mp.js"
,
"build:mp-toutiao"
:
"cross-env UNI_PLATFORM=mp-toutiao rollup -c build/rollup.config.mp.js"
,
"build:
quickapp-light"
:
"cross-env UNI_PLATFORM=quickapp-light
rollup -c build/rollup.config.mp.js"
,
"build:mp-weixin:mp"
:
"npm run lint && cross-env UNI_PLATFORM=mp-weixin UNI_MP=true rollup -c build/rollup.config.mp.js"
,
"build:mp-weixin:wxs"
:
"rollup -c build/rollup.config.wxs.js"
,
"build:quickapp"
:
"cross-env NODE_ENV=development node build/build.qa.js && cross-env NODE_ENV=production node build/build.qa.js"
,
...
...
@@ -111,7 +111,7 @@
"my"
:
true
,
"swan"
:
true
,
"tt"
:
true
,
"qh"
:
true
,
"qh"
:
true
,
"qa"
:
true
,
"HWH5"
:
true
,
"weex"
:
true
,
...
...
@@ -147,4 +147,4 @@
"main"
:
"index.js"
,
"description"
:
""
,
"author"
:
""
}
}
packages/uni-app-plus/dist/index.v3.js
浏览文件 @
8b93f24d
...
...
@@ -165,7 +165,8 @@ var serviceContext = (function () {
'
startPullDownRefresh
'
,
'
stopPullDownRefresh
'
,
'
createSelectorQuery
'
,
'
createIntersectionObserver
'
'
createIntersectionObserver
'
,
'
getMenuButtonBoundingClientRect
'
];
const
event
=
[
...
...
@@ -649,7 +650,7 @@ var serviceContext = (function () {
const
ASYNC_API
=
[
'
createBLEConnection
'
];
const
CALLBACK_API_RE
=
/^on/
;
const
CALLBACK_API_RE
=
/^on
|^off
/
;
function
isContextApi
(
name
)
{
return
CONTEXT_API_RE
.
test
(
name
)
...
...
@@ -2970,7 +2971,7 @@ var serviceContext = (function () {
}
function
getScreenInfo
()
{
const
{
resolutionWidth
,
resolutionHeight
}
=
plus
.
screen
.
getCur
e
entSize
();
const
{
resolutionWidth
,
resolutionHeight
}
=
plus
.
screen
.
getCur
r
entSize
();
return
{
screenWidth
:
Math
.
round
(
resolutionWidth
),
screenHeight
:
Math
.
round
(
resolutionHeight
)
...
...
@@ -5651,14 +5652,21 @@ var serviceContext = (function () {
openLocation
:
openLocation$1
});
function
openLocation$2
(
data
)
{
function
openLocation$2
(
data
,
callbackId
)
{
showPage
({
url
:
'
__uniappopenlocation
'
,
data
,
style
:
{
titleNView
:
{
type
:
'
transparent
'
}
},
popGesture
:
'
close
'
,
backButtonAutoControl
:
'
close
'
},
onClose
()
{
invoke$1
(
callbackId
,
{
errMsg
:
'
openLocation:fail cancel
'
});
}
});
return
{
...
...
@@ -9253,17 +9261,14 @@ var serviceContext = (function () {
const
eventNames
=
[
'
load
'
,
'
close
'
,
'
verify
'
,
'
error
'
];
const
ERROR_CODE_LIST
=
[
-
5001
,
-
5002
,
-
5003
,
-
5004
,
-
5005
,
-
5006
];
class
RewardedVideoAd
{
constructor
(
adpid
)
{
this
.
_options
=
{
adpid
:
adpid
};
constructor
(
options
=
{})
{
const
_callbacks
=
this
.
_callbacks
=
{};
eventNames
.
forEach
(
item
=>
{
_callbacks
[
item
]
=
[];
...
...
@@ -9277,7 +9282,7 @@ var serviceContext = (function () {
this
.
_adError
=
''
;
this
.
_loadPromiseResolve
=
null
;
this
.
_loadPromiseReject
=
null
;
const
rewardAd
=
this
.
_rewardAd
=
plus
.
ad
.
createRewardedVideoAd
(
this
.
_
options
);
const
rewardAd
=
this
.
_rewardAd
=
plus
.
ad
.
createRewardedVideoAd
(
options
);
rewardAd
.
onLoad
((
e
)
=>
{
this
.
_isLoad
=
true
;
this
.
_dispatchEvent
(
'
load
'
,
{});
...
...
@@ -9290,6 +9295,9 @@ var serviceContext = (function () {
this
.
_loadAd
();
this
.
_dispatchEvent
(
'
close
'
,
{
isEnded
:
e
.
isEnded
});
});
rewardAd
.
onVerify
&&
rewardAd
.
onVerify
((
e
)
=>
{
this
.
_dispatchEvent
(
'
verify
'
,
{
isValid
:
e
.
isValid
});
});
rewardAd
.
onError
((
e
)
=>
{
const
{
code
,
message
}
=
e
;
const
data
=
{
code
:
code
,
errMsg
:
message
};
...
...
@@ -9323,6 +9331,12 @@ var serviceContext = (function () {
}
})
}
getProvider
()
{
return
this
.
_rewardAd
.
getProvider
()
}
destroy
()
{
this
.
_rewardAd
.
destroy
();
}
_loadAd
()
{
this
.
_isLoad
=
false
;
this
.
_rewardAd
.
load
();
...
...
@@ -9336,10 +9350,8 @@ var serviceContext = (function () {
}
}
function
createRewardedVideoAd
({
adpid
=
''
}
=
{})
{
return
new
RewardedVideoAd
(
adpid
)
function
createRewardedVideoAd
(
options
)
{
return
new
RewardedVideoAd
(
options
)
}
...
...
@@ -10646,8 +10658,9 @@ var serviceContext = (function () {
var
cId
=
canvasEventCallbacks
.
push
(
function
(
data
)
{
invoke$1
(
callbackId
,
data
);
});
// fix ...
operateCanvas
(
canvasId
,
pageId
,
'
putImageData
'
,
{
data
:
[...
data
]
,
data
:
Array
.
prototype
.
slice
.
call
(
data
)
,
x
,
y
,
width
,
...
...
@@ -10729,17 +10742,13 @@ var serviceContext = (function () {
callback
.
invoke
(
callbackId
,
data
);
});
const
methods
=
[
'
getCenterLocation
'
,
'
getScale
'
,
'
getRegion
'
,
'
includePoints
'
,
'
translateMarker
'
];
const
methods
=
[
'
getCenterLocation
'
,
'
moveToLocation
'
,
'
getScale
'
,
'
getRegion
'
,
'
includePoints
'
,
'
translateMarker
'
];
class
MapContext
{
constructor
(
id
,
pageVm
)
{
this
.
id
=
id
;
this
.
pageVm
=
pageVm
;
}
moveToLocation
()
{
operateMapPlayer$3
(
this
.
id
,
this
.
pageVm
,
'
moveToLocation
'
);
}
}
MapContext
.
prototype
.
$getAppMap
=
function
()
{
...
...
@@ -12146,7 +12155,7 @@ var serviceContext = (function () {
return
}
if
(
!
page
.
$page
.
meta
.
isNVue
)
{
const
target
=
page
.
$vm
.
_$vd
.
elements
.
find
(
target
=>
target
.
t
agNam
e
===
'
web-view
'
&&
target
.
events
[
'
message
'
]);
const
target
=
page
.
$vm
.
_$vd
.
elements
.
find
(
target
=>
target
.
t
yp
e
===
'
web-view
'
&&
target
.
events
[
'
message
'
]);
if
(
!
target
)
{
return
}
...
...
@@ -13191,8 +13200,7 @@ var serviceContext = (function () {
cur
=
newObj
[
key
];
old
=
oldObj
[
key
];
if
(
old
!==
cur
)
{
// 全量同步 style (因为 style 可能会动态删除部分样式)
if
(
key
===
B_STYLE
&&
isPlainObject
(
cur
)
&&
isPlainObject
(
old
))
{
if
(
key
===
B_STYLE
&&
isPlainObject
(
cur
)
&&
isPlainObject
(
old
))
{
// 全量同步 style (因为 style 可能会动态删除部分样式)
if
(
Object
.
keys
(
cur
).
length
!==
Object
.
keys
(
old
).
length
)
{
// 长度不等
setResult
(
result
||
(
result
=
Object
.
create
(
null
)),
B_STYLE
,
cur
);
}
else
{
...
...
@@ -13203,6 +13211,14 @@ var serviceContext = (function () {
const
vFor
=
diffArray
(
cur
,
old
);
vFor
&&
setResult
(
result
||
(
result
=
Object
.
create
(
null
)),
V_FOR
,
vFor
);
}
else
{
if
(
key
.
indexOf
(
'
change:
'
)
===
0
)
{
// wxs change:prop
try
{
// 先简单的用 stringify 判断
if
(
JSON
.
stringify
(
cur
)
===
JSON
.
stringify
(
old
))
{
continue
}
}
catch
(
e
)
{}
}
setResult
(
result
||
(
result
=
Object
.
create
(
null
)),
key
,
cur
);
}
}
...
...
packages/uni-quickapp-light/dist/index.js
0 → 100644
浏览文件 @
8b93f24d
此差异已折叠。
点击以展开。
packages/uni-quickapp-light/lib/assets/jsconfig.json
0 → 100644
浏览文件 @
8b93f24d
{
"compilerOptions"
:
{
"target"
:
"es6"
,
"module"
:
"commonjs"
}
}
\ No newline at end of file
packages/uni-quickapp-light/lib/uni.compiler.js
0 → 100644
浏览文件 @
8b93f24d
const
compiler
=
require
(
'
@dcloudio/uni-mp-weixin/lib/uni.compiler.js
'
)
module
.
exports
=
Object
.
assign
({},
compiler
,
{
directive
:
'
qa:
'
})
packages/uni-quickapp-light/lib/uni.config.js
0 → 100644
浏览文件 @
8b93f24d
const
fs
=
require
(
'
fs
'
)
const
path
=
require
(
'
path
'
)
module
.
exports
=
{
options
:
{
cssVars
:
{
'
--status-bar-height
'
:
'
25px
'
,
'
--window-top
'
:
'
0px
'
,
'
--window-bottom
'
:
'
0px
'
},
extnames
:
{
style
:
'
.css
'
,
template
:
'
.qxml
'
,
filter
:
'
.qjs
'
},
filterTag
:
'
qjs
'
},
validate
(
platformOptions
,
manifestJson
)
{
if
(
!
platformOptions
.
package
)
{
console
.
warn
(
'
manifest.json->quickapp-light 缺少 package 配置
'
)
}
if
(
!
platformOptions
.
icon
)
{
console
.
error
(
'
manifest.json->quickapp-light 缺少 icon 配置
'
)
}
},
copyWebpackOptions
(
platformOptions
,
vueOptions
)
{
const
jsConfigPath
=
path
.
resolve
(
process
.
env
.
UNI_INPUT_DIR
,
'
jsconfig.json
'
)
if
(
fs
.
existsSync
(
jsConfigPath
))
{
return
[
jsConfigPath
]
}
return
[
path
.
resolve
(
__dirname
,
'
assets/jsconfig.json
'
)]
},
configureWebpack
()
{
return
{
devtool
:
process
.
env
.
NODE_ENV
===
'
production
'
?
false
:
'
inline-source-map
'
}
}
}
packages/uni-quickapp-light/package.json
0 → 100644
浏览文件 @
8b93f24d
{
"name"
:
"@dcloudio/uni-quickapp-light"
,
"version"
:
"2.0.0-alpha-26420200309002"
,
"description"
:
"uni-app quickapp-light"
,
"main"
:
"dist/index.js"
,
"repository"
:
{
"type"
:
"git"
,
"url"
:
"git+https://github.com/dcloudio/uni-app.git"
,
"directory"
:
"packages/uni-quickapp-light"
},
"scripts"
:
{
"test"
:
"echo
\"
Error: no test specified
\"
&& exit 1"
},
"author"
:
"fxy060608"
,
"license"
:
"Apache-2.0"
,
"uni-app"
:
{
"name"
:
"quickapp-light"
,
"title"
:
"快应用(Light)版"
},
"gitHead"
:
"84e9cb1ca1898054d161f1514efadd1ab24fd804"
}
packages/uni-template-compiler/__tests__/compiler-quickapp-light.spec.js
0 → 100644
浏览文件 @
8b93f24d
const
compiler
=
require
(
'
../lib
'
)
function
assertCodegen
(
template
,
templateCode
,
renderCode
=
`with(this){}`
,
options
=
{})
{
const
res
=
compiler
.
compile
(
template
,
{
resourcePath
:
'
test.qxml
'
,
mp
:
Object
.
assign
({
minified
:
true
,
isTest
:
true
,
platform
:
'
quickapp-light
'
},
options
)
})
expect
(
res
.
template
).
toBe
(
templateCode
)
expect
(
res
.
render
).
toBe
(
renderCode
)
}
describe
(
'
mp:compiler-quickapp-light
'
,
()
=>
{
it
(
'
generate v-for directive
'
,
()
=>
{
assertCodegen
(
'
<view><view v-for="(item,index) in items" :key="index"></view></view>
'
,
`<view><block qa:for="{{items}}" qa:for-item="item" qa:for-index="index" qa:key="index"><view></view></block></view>`
)
})
it
(
'
generate v-else-if with v-else directive
'
,
()
=>
{
assertCodegen
(
'
<view><view v-if="show">hello</view><view v-else-if="hide">world</view><view v-else>bye</view></view>
'
,
`<view><block qa:if="{{show}}"><view>hello</view></block><block qa:else><block qa:if="{{hide}}"><view>world</view></block><block qa:else><view>bye</view></block></block></view>`
)
})
})
packages/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js
浏览文件 @
8b93f24d
...
...
@@ -4971,10 +4971,10 @@ function initMixin (Vue) {
initEvents
(
vm
);
initRender
(
vm
);
callHook
(
vm
,
'
beforeCreate
'
);
vm
.
mpHost
!==
'
mp-toutiao
'
&&
initInjections
(
vm
);
// resolve injections before data/props
!
vm
.
_$fallback
&&
initInjections
(
vm
);
// resolve injections before data/props
initState
(
vm
);
vm
.
mpHost
!==
'
mp-toutiao
'
&&
initProvide
(
vm
);
// resolve provide after data/props
vm
.
mpHost
!==
'
mp-toutiao
'
&&
callHook
(
vm
,
'
created
'
);
!
vm
.
_$fallback
&&
initProvide
(
vm
);
// resolve provide after data/props
!
vm
.
_$fallback
&&
callHook
(
vm
,
'
created
'
);
/* istanbul ignore if */
if
(
process
.
env
.
NODE_ENV
!==
'
production
'
&&
config
.
performance
&&
mark
)
{
...
...
@@ -5690,7 +5690,7 @@ function mountComponent$1(
}
}
vm
.
mpHost
!==
'
mp-toutiao
'
&&
callHook
(
vm
,
'
beforeMount
'
);
!
vm
.
_$fallback
&&
callHook
(
vm
,
'
beforeMount
'
);
var
updateComponent
=
function
()
{
vm
.
_update
(
vm
.
_render
(),
hydrating
);
...
...
packages/webpack-uni-pages-loader/lib/platforms/quickapp-light/index.js
0 → 100644
浏览文件 @
8b93f24d
/**
* webpack-uni-pages-loader 待重构,需要将平台特有逻辑,收敛到各自包内
* @param {Object} pagesJson
* @param {Object} manifestJson
*/
module
.
exports
=
function
(
pagesJson
,
manifestJson
)
{
const
{
app
}
=
require
(
'
../mp
'
)(
pagesJson
,
manifestJson
)
const
baseJson
=
{
minPlatformVersion
:
1053
}
manifestJson
.
name
&&
(
baseJson
.
name
=
manifestJson
.
name
)
manifestJson
.
versionName
&&
(
baseJson
.
versionName
=
manifestJson
.
versionName
)
manifestJson
.
versionCode
&&
(
baseJson
.
versionCode
=
manifestJson
.
versionCode
)
Object
.
assign
(
app
.
content
,
baseJson
,
manifestJson
[
'
quickapp-light
'
]
||
{})
if
(
!
app
.
content
.
package
)
{
app
.
content
.
package
=
manifestJson
.
name
}
return
[
app
]
}
src/core/runtime/web-view/index.js
浏览文件 @
8b93f24d
...
...
@@ -19,6 +19,9 @@ import {
import
{
initWebviewApi
as
initWeixinWebviewApi
}
from
'
uni-platforms/mp-weixin/runtime/web-view
'
import
{
initWebviewApi
as
initQuickappWebviewApi
}
from
'
uni-platforms/quickapp-light/runtime/web-view
'
const
UniAppJSBridgeReady
=
function
()
{
window
.
UniAppJSBridge
=
true
...
...
@@ -35,6 +38,7 @@ const initWebviewApis = [
initAlipayWebviewApi
,
initBaiduWebviewApi
,
initToutiaoWebviewApi
,
initQuickappWebviewApi
,
initH5WebviewApi
]
...
...
@@ -61,4 +65,4 @@ if (!api.navigateTo) {
}
api
.
webView
=
webViewApi
export
default
api
export
default
api
src/platforms/quickapp-light/runtime/api/index.js
0 → 100644
浏览文件 @
8b93f24d
src/platforms/quickapp-light/runtime/api/protocols.js
0 → 100644
浏览文件 @
8b93f24d
import
previewImage
from
'
../../../mp-weixin/helpers/normalize-preview-image
'
export
const
protocols
=
{
previewImage
}
export
const
todos
=
[]
export
const
canIUses
=
[]
src/platforms/quickapp-light/runtime/api/providers.js
0 → 100644
浏览文件 @
8b93f24d
const
providers
=
{
oauth
:
[],
share
:
[],
payment
:
[],
push
:
[]
}
if
(
qa
.
canIUse
(
'
getAccountProvider
'
))
{
providers
.
oauth
.
push
(
qa
.
getAccountProvider
())
}
if
(
qa
.
canIUse
(
'
getVendorPaymentProvider
'
))
{
providers
.
payment
.
push
(
qa
.
getVendorPaymentProvider
())
}
export
default
providers
src/platforms/quickapp-light/runtime/index.js
0 → 100644
浏览文件 @
8b93f24d
import
'
../../mp-weixin/runtime/index
'
src/platforms/quickapp-light/runtime/web-view.js
0 → 100644
浏览文件 @
8b93f24d
const
isQuickapp
=
window
.
qa
&&
/quickapp/i
.
test
(
navigator
.
userAgent
)
export
function
initWebviewApi
(
readyCallback
)
{
if
(
!
isQuickapp
)
{
return
}
if
(
window
.
QaJSBridge
&&
window
.
QaJSBridge
.
invoke
)
{
setTimeout
(
readyCallback
,
0
)
}
else
{
document
.
addEventListener
(
'
QaJSBridgeReady
'
,
readyCallback
)
}
const
{
navigateTo
,
navigateBack
,
switchTab
,
reLaunch
,
redirectTo
,
postMessage
,
getEnv
}
=
window
.
qa
return
{
navigateTo
,
navigateBack
,
switchTab
,
reLaunch
,
redirectTo
,
postMessage
,
getEnv
}
}
src/platforms/quickapp-light/runtime/wrapper/app-parser.js
0 → 100644
浏览文件 @
8b93f24d
import
Vue
from
'
vue
'
import
parseBaseApp
from
'
../../../mp-weixin/runtime/wrapper/app-base-parser
'
import
{
mocks
,
initRefs
}
from
'
./util
'
export
default
function
parseApp
(
vm
)
{
Vue
.
prototype
.
_$fallback
=
true
// 降级(调整原 vue 的部分生命周期,如 created,beforeMount,inject,provide)
Vue
.
mixin
({
created
()
{
// 处理 injections, triggerEvent 是异步,且触发时机很慢,故延迟 relation 设置
if
(
this
.
mpType
!==
'
app
'
)
{
initRefs
(
this
)
this
.
__init_injections
(
this
)
this
.
__init_provide
(
this
)
}
}
})
return
parseBaseApp
(
vm
,
{
mocks
,
initRefs
:
function
()
{}
// attached 时,可能查询不到
})
}
src/platforms/quickapp-light/runtime/wrapper/component-parser.js
0 → 100644
浏览文件 @
8b93f24d
import
{
isPage
,
initRelation
,
handleLink
}
from
'
./util
'
import
{
initSlots
,
initVueIds
}
from
'
uni-wrapper/util
'
import
parseBaseComponent
from
'
../../../mp-weixin/runtime/wrapper/component-base-parser
'
export
default
function
parseComponent
(
vueOptions
)
{
const
[
componentOptions
,
VueComponent
]
=
parseBaseComponent
(
vueOptions
)
componentOptions
.
lifetimes
.
attached
=
function
attached
()
{
const
properties
=
this
.
properties
const
options
=
{
mpType
:
isPage
.
call
(
this
)
?
'
page
'
:
'
component
'
,
mpInstance
:
this
,
propsData
:
properties
}
initVueIds
(
properties
.
vueId
,
this
)
// 初始化 vue 实例
this
.
$vm
=
new
VueComponent
(
options
)
// 处理$slots,$scopedSlots(暂不支持动态变化$slots)
initSlots
(
this
.
$vm
,
properties
.
vueSlots
)
// 处理父子关系
initRelation
.
call
(
this
,
{
vuePid
:
this
.
_$vuePid
,
mpInstance
:
this
})
// 触发首次 setData
this
.
$vm
.
$mount
()
}
// ready 比 handleLink 还早,初始化逻辑放到 handleLink 中
delete
componentOptions
.
lifetimes
.
ready
componentOptions
.
methods
.
__l
=
handleLink
return
componentOptions
}
src/platforms/quickapp-light/runtime/wrapper/page-parser.js
0 → 100644
浏览文件 @
8b93f24d
import
{
isPage
,
instances
,
initRelation
}
from
'
./util
'
import
parseBasePage
from
'
../../../mp-weixin/runtime/wrapper/page-base-parser
'
export
default
function
parsePage
(
vuePageOptions
)
{
const
pageOptions
=
parseBasePage
(
vuePageOptions
,
{
isPage
,
initRelation
})
// 页面需要在 ready 中触发,其他组件是在 handleLink 中触发
pageOptions
.
lifetimes
.
ready
=
function
ready
()
{
if
(
this
.
$vm
&&
this
.
$vm
.
mpType
===
'
page
'
)
{
this
.
$vm
.
__call_hook
(
'
created
'
)
this
.
$vm
.
__call_hook
(
'
beforeMount
'
)
this
.
$vm
.
_isMounted
=
true
this
.
$vm
.
__call_hook
(
'
mounted
'
)
this
.
$vm
.
__call_hook
(
'
onReady
'
)
}
else
{
this
.
is
&&
console
.
warn
(
this
.
is
+
'
is not ready
'
)
}
}
pageOptions
.
lifetimes
.
detached
=
function
detached
()
{
this
.
$vm
&&
this
.
$vm
.
$destroy
()
// 清理
const
pageId
=
this
.
pageinstance
.
__pageId__
Object
.
keys
(
instances
).
forEach
(
key
=>
{
if
(
key
.
indexOf
(
pageId
+
'
_
'
)
===
0
)
{
delete
instances
[
key
]
}
})
}
return
pageOptions
}
src/platforms/quickapp-light/runtime/wrapper/util.js
0 → 100644
浏览文件 @
8b93f24d
export
{
mocks
,
isPage
}
from
'
../../../mp-baidu/runtime/wrapper/util
'
export
{
initRefs
}
from
'
../../../mp-weixin/runtime/wrapper/util
'
export
const
instances
=
Object
.
create
(
null
)
export
function
initRelation
({
vuePid
,
mpInstance
})
{
// triggerEvent 后,接收事件时机特别晚,已经到了 ready 之后
const
nodeId
=
mpInstance
.
nodeId
+
''
const
webviewId
=
mpInstance
.
pageinstance
.
__pageId__
+
''
instances
[
webviewId
+
'
_
'
+
nodeId
]
=
mpInstance
.
$vm
this
.
triggerEvent
(
'
__l
'
,
{
vuePid
,
nodeId
,
webviewId
})
}
export
function
handleLink
({
detail
:
{
nodeId
,
webviewId
}
})
{
const
vm
=
instances
[
webviewId
+
'
_
'
+
nodeId
]
if
(
!
vm
)
{
return
}
let
parentVm
=
instances
[
webviewId
+
'
_
'
+
vm
.
$scope
.
ownerId
]
if
(
!
parentVm
)
{
parentVm
=
this
.
$vm
}
vm
.
$parent
=
parentVm
vm
.
$root
=
parentVm
.
$root
parentVm
.
$children
.
push
(
vm
)
const
createdVm
=
function
()
{
vm
.
__call_hook
(
'
created
'
)
}
const
mountedVm
=
function
()
{
// 处理当前 vm 子
if
(
vm
.
_$childVues
)
{
vm
.
_$childVues
.
forEach
(([
createdVm
])
=>
createdVm
())
vm
.
_$childVues
.
forEach
(([,
mountedVm
])
=>
mountedVm
())
delete
vm
.
_$childVues
}
vm
.
__call_hook
(
'
beforeMount
'
)
vm
.
_isMounted
=
true
vm
.
__call_hook
(
'
mounted
'
)
vm
.
__call_hook
(
'
onReady
'
)
}
// 当 parentVm 已经 mounted 时,直接触发,否则延迟
if
(
!
parentVm
||
parentVm
.
_isMounted
)
{
createdVm
()
mountedVm
()
}
else
{
(
parentVm
.
_$childVues
||
(
parentVm
.
_$childVues
=
[])).
push
([
createdVm
,
mountedVm
])
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录