7
7
global . Page = global . Page || Page ;
8
8
global . Component = global . Component || Component ;
9
9
global . getApp = global . getApp || getApp ;
10
+
11
+ if ( typeof wx !== 'undefined' ) {
12
+ global . mpvue = wx ;
13
+ global . mpvuePlatform = 'wx' ;
14
+ } else if ( typeof swan !== 'undefined' ) {
15
+ global . mpvue = swan ;
16
+ global . mpvuePlatform = 'swan' ;
17
+ }
10
18
} catch ( e ) { }
11
19
12
20
( function ( global , factory ) {
@@ -847,8 +855,6 @@ function observe (value, asRootData, key) {
847
855
! value . _isVue
848
856
) {
849
857
ob = new Observer ( value , key ) ;
850
- ob . __keyPath = ob . __keyPath ? ob . __keyPath : { } ;
851
- ob . __keyPath [ key ] = true ;
852
858
}
853
859
if ( asRootData && ob ) {
854
860
ob . vmCount ++ ;
@@ -873,8 +879,6 @@ function defineReactive$$1 (
873
879
return
874
880
}
875
881
876
- // TODO: 先试验标记一下 keyPath
877
-
878
882
// cater for pre-defined getter/setters
879
883
var getter = property && property . get ;
880
884
var setter = property && property . set ;
@@ -914,8 +918,12 @@ function defineReactive$$1 (
914
918
}
915
919
childOb = ! shallow && observe ( newVal , undefined , key ) ;
916
920
dep . notify ( ) ;
917
- obj . __keyPath = obj . __keyPath ? obj . __keyPath : { } ;
918
- obj . __keyPath [ key ] = true ;
921
+
922
+ var ob = obj . __ob__ ;
923
+ if ( ! ob . __keyPath ) {
924
+ def ( ob , '__keyPath' , { } , false ) ;
925
+ }
926
+ ob . __keyPath [ key ] = true ;
919
927
}
920
928
} ) ;
921
929
}
@@ -948,8 +956,10 @@ function set (target, key, val) {
948
956
return val
949
957
}
950
958
defineReactive$$1 ( ob . value , key , val ) ;
951
- // Vue.set 添加对象属性,渲染时候把val传给小程序渲染
952
- target . __keyPath = target . __keyPath ? target . __keyPath : { } ;
959
+ // Vue.set 添加对象属性,渲染时候把 val 传给小程序渲染
960
+ if ( ! target . __keyPath ) {
961
+ def ( target , '__keyPath' , { } , false ) ;
962
+ }
953
963
target . __keyPath [ key ] = true ;
954
964
ob . dep . notify ( ) ;
955
965
return val
@@ -978,8 +988,10 @@ function del (target, key) {
978
988
if ( ! ob ) {
979
989
return
980
990
}
981
- target . __keyPath = target . __keyPath ? target . __keyPath : { } ;
982
- // Vue.del 删除对象属性,渲染时候把这个属性设置为undefined
991
+ if ( ! target . __keyPath ) {
992
+ def ( target , '__keyPath' , { } , false ) ;
993
+ }
994
+ // Vue.del 删除对象属性,渲染时候把这个属性设置为 undefined
983
995
target . __keyPath [ key ] = 'del' ;
984
996
ob . dep . notify ( ) ;
985
997
}
@@ -4961,6 +4973,8 @@ function callHook$1 (vm, hook, params) {
4961
4973
var handlers = vm . $options [ hook ] ;
4962
4974
if ( hook === 'onError' && handlers ) {
4963
4975
handlers = [ handlers ] ;
4976
+ } else if ( hook === 'onPageNotFound' && handlers ) {
4977
+ handlers = [ handlers ] ;
4964
4978
}
4965
4979
4966
4980
var ret ;
@@ -5176,6 +5190,10 @@ function initMP (mpType, next) {
5176
5190
5177
5191
onError : function onError ( err ) {
5178
5192
callHook$1 ( rootVueVM , 'onError' , err ) ;
5193
+ } ,
5194
+
5195
+ onPageNotFound : function onPageNotFound ( err ) {
5196
+ callHook$1 ( rootVueVM , 'onPageNotFound' , err ) ;
5179
5197
}
5180
5198
} ) ;
5181
5199
} else if ( mpType === 'component' ) {
@@ -5343,13 +5361,14 @@ function getDeepData (keyList, viewData) {
5343
5361
}
5344
5362
}
5345
5363
}
5346
- function compareAndSetDeepData ( key , newData , vm , data ) {
5364
+
5365
+ function compareAndSetDeepData ( key , newData , vm , data , forceUpdate ) {
5347
5366
// 比较引用类型数据
5348
5367
try {
5349
5368
var keyList = key . split ( '.' ) ;
5350
- // page.__viewData__老版小程序不存在,使用mpvue里绑的data比对
5369
+ // page.__viewData__老版小程序不存在,使用mpvue里绑的data比对
5351
5370
var oldData = getDeepData ( keyList , vm . $root . $mp . page . data ) ;
5352
- if ( oldData === null || JSON . stringify ( oldData ) !== JSON . stringify ( newData ) ) {
5371
+ if ( oldData === null || JSON . stringify ( oldData ) !== JSON . stringify ( newData ) || forceUpdate ) {
5353
5372
data [ key ] = newData ;
5354
5373
}
5355
5374
} catch ( e ) {
@@ -5369,7 +5388,7 @@ function minifyDeepData (rootKey, originKey, vmData, data, _mpValueSet, vm) {
5369
5388
try {
5370
5389
if ( vmData instanceof Array ) {
5371
5390
// 数组
5372
- compareAndSetDeepData ( rootKey + '.' + originKey , vmData , vm , data ) ;
5391
+ compareAndSetDeepData ( rootKey + '.' + originKey , vmData , vm , data , true ) ;
5373
5392
} else {
5374
5393
// Object
5375
5394
var _keyPathOnThis = { } ; // 存储这层对象的keyPath
@@ -5431,20 +5450,19 @@ function diffData (vm, data) {
5431
5450
} ) ;
5432
5451
// console.log(rootKey)
5433
5452
5434
- // 值类型变量不考虑优化,还是直接更新
5435
- var __keyPathOnThis = vmData . __keyPath || vm . __keyPath || { } ;
5453
+ // 值类型变量不考虑优化,还是直接更新
5454
+ var __keyPathOnThis = getDeepData ( [ '__ob__' , ' __keyPath' ] , vmData ) || getDeepData ( [ '__ob__' , ' __keyPath' ] , vm ) || { } ;
5436
5455
delete vm . __keyPath ;
5437
5456
delete vmData . __keyPath ;
5438
5457
delete vmProps . __keyPath ;
5439
5458
if ( vm . _mpValueSet === 'done' ) {
5440
5459
// 第二次赋值才进行缩减操作
5441
5460
Object . keys ( vmData ) . forEach ( function ( vmDataItemKey ) {
5442
5461
if ( vmData [ vmDataItemKey ] instanceof Object ) {
5443
- // 引用类型
5444
- if ( vmDataItemKey === '__keyPath' ) { return }
5462
+ // 引用类型
5445
5463
minifyDeepData ( rootKey , vmDataItemKey , vmData [ vmDataItemKey ] , data , vm . _mpValueSet , vm ) ;
5446
- } else if ( vmData [ vmDataItemKey ] !== undefined ) {
5447
- // _data上的值属性只有要更新的时候才赋值
5464
+ } else if ( vmData [ vmDataItemKey ] !== undefined ) {
5465
+ // _data上的值属性只有要更新的时候才赋值
5448
5466
if ( __keyPathOnThis [ vmDataItemKey ] === true ) {
5449
5467
data [ rootKey + '.' + vmDataItemKey ] = vmData [ vmDataItemKey ] ;
5450
5468
}
@@ -5454,9 +5472,8 @@ function diffData (vm, data) {
5454
5472
Object . keys ( vmProps ) . forEach ( function ( vmPropsItemKey ) {
5455
5473
if ( vmProps [ vmPropsItemKey ] instanceof Object ) {
5456
5474
// 引用类型
5457
- if ( vmPropsItemKey === '__keyPath' ) { return }
5458
5475
minifyDeepData ( rootKey , vmPropsItemKey , vmProps [ vmPropsItemKey ] , data , vm . _mpValueSet , vm ) ;
5459
- } else if ( vmProps [ vmPropsItemKey ] !== undefined ) {
5476
+ } else if ( vmProps [ vmPropsItemKey ] !== undefined ) {
5460
5477
data [ rootKey + '.' + vmPropsItemKey ] = vmProps [ vmPropsItemKey ] ;
5461
5478
}
5462
5479
// _props上的值属性只有要更新的时候才赋值
@@ -5471,14 +5488,14 @@ function diffData (vm, data) {
5471
5488
Object . keys ( vmComputedWatchers ) . forEach ( function ( computedItemKey ) {
5472
5489
data [ rootKey + '.' + computedItemKey ] = vm [ computedItemKey ] ;
5473
5490
} ) ;
5474
- // 更新的时候要删除$root.0:{},否则会覆盖原正确数据
5491
+ // 更新的时候要删除$root.0:{},否则会覆盖原正确数据
5475
5492
delete data [ rootKey ] ;
5476
5493
}
5477
5494
if ( vm . _mpValueSet === undefined ) {
5478
- // 第一次设置数据成功后,标记位置true,再更新到这个节点如果没有keyPath数组认为不需要更新
5495
+ // 第一次设置数据成功后,标记位置true,再更新到这个节点如果没有keyPath数组认为不需要更新
5479
5496
vm . _mpValueSet = 'done' ;
5480
5497
}
5481
- if ( Vue$3 . config . devtools ) {
5498
+ if ( Vue$3 . config . _mpTrace ) {
5482
5499
// console.log('更新VM节点', vm)
5483
5500
// console.log('实际传到Page.setData数据', data)
5484
5501
diffLog ( data ) ;
@@ -5624,7 +5641,6 @@ function getPage (vm) {
5624
5641
}
5625
5642
5626
5643
// 优化js变量动态变化时候引起全量更新
5627
-
5628
5644
// 优化每次 setData 都传递大量新数据
5629
5645
function updateDataToMP ( ) {
5630
5646
var page = getPage ( this ) ;
@@ -5633,9 +5649,7 @@ function updateDataToMP () {
5633
5649
}
5634
5650
5635
5651
var data = formatVmData ( this ) ;
5636
-
5637
5652
diffData ( this , data ) ;
5638
-
5639
5653
throttleSetData ( page . setData . bind ( page ) , data ) ;
5640
5654
}
5641
5655
@@ -5743,6 +5757,8 @@ function getWebEventByMP (e) {
5743
5757
return event
5744
5758
}
5745
5759
5760
+
5761
+ var KEY_SEP$1 = '_' ;
5746
5762
function handleProxyWithVue ( e ) {
5747
5763
var rootVueVM = this . $root ;
5748
5764
var type = e . type ;
@@ -5752,7 +5768,7 @@ function handleProxyWithVue (e) {
5752
5768
var dataset = ref . dataset ; if ( dataset === void 0 ) dataset = { } ;
5753
5769
var comkey = dataset . comkey ; if ( comkey === void 0 ) comkey = '' ;
5754
5770
var eventid = dataset . eventid ;
5755
- var vm = getVM ( rootVueVM , comkey . split ( ',' ) ) ;
5771
+ var vm = getVM ( rootVueVM , comkey . split ( KEY_SEP$1 ) ) ;
5756
5772
5757
5773
if ( ! vm ) {
5758
5774
return
0 commit comments