提交 1006ae6a 编写于 作者: Q qiang

Merge branch 'dev' into alpha

......@@ -1359,7 +1359,7 @@ function parseBaseComponent (vueComponentOptions, {
}
},
detached () {
this.$vm.$destroy();
this.$vm && this.$vm.$destroy();
}
},
pageLifetimes: {
......
......@@ -5639,8 +5639,10 @@ function insertBefore() {
}
function removeChild() {
function removeChild(node, child) {
if (child && child._$vd) {
child._$vd.removeElement(child);
}
}
function appendChild() {
......
......@@ -1493,7 +1493,7 @@ function parseBaseComponent (vueComponentOptions, {
}
},
detached () {
this.$vm.$destroy();
this.$vm && this.$vm.$destroy();
}
},
pageLifetimes: {
......
......@@ -1418,7 +1418,7 @@ function parseBaseComponent (vueComponentOptions, {
}
},
detached () {
this.$vm.$destroy();
this.$vm && this.$vm.$destroy();
}
},
pageLifetimes: {
......
......@@ -1583,7 +1583,7 @@ function parseBaseComponent (vueComponentOptions, {
}
},
detached () {
this.$vm.$destroy();
this.$vm && this.$vm.$destroy();
}
},
pageLifetimes: {
......
......@@ -1371,7 +1371,7 @@ function parseBaseComponent (vueComponentOptions, {
}
},
detached () {
this.$vm.$destroy();
this.$vm && this.$vm.$destroy();
}
},
pageLifetimes: {
......
......@@ -16,29 +16,29 @@ describe('codegen', () => {
it('generate directive', () => {
assertCodegen(
'<p v-custom1:[arg1].modifier="value1" v-custom2></p>',
`with(this){return _c('v-uni-view',{attrs:{"_i":0}})}`
`with(this){return _c('p',{attrs:{"_i":0}})}`
)
})
it('generate v-for directive', () => {
assertCodegen(
'<div><template v-for="item in items"><div></div><div></div></template></div>',
`with(this){return _c('v-uni-view',{attrs:{"_i":0}},[_l((_$g(1,'f')),function(item,$10,$20,$30){return [_c('v-uni-view',{key:item['k0'],attrs:{"_i":("2-"+$30)}}),_c('v-uni-view',{key:item['k1'],attrs:{"_i":("3-"+$30)}})]})],2)}`
`with(this){return _c('div',{attrs:{"_i":0}},[_l((_$g(1,'f')),function(item,$10,$20,$30){return [_c('div',{key:item['k0'],attrs:{"_i":("2-"+$30)}}),_c('div',{key:item['k1'],attrs:{"_i":("3-"+$30)}})]})],2)}`
)
assertCodegen(
'<div><template v-for="item in items"><span v-if="item.sub"></span></template></div>',
`with(this){return _c('v-uni-view',{attrs:{"_i":0}},[_l((_$g(1,'f')),function(item,$10,$20,$30){return [(_$g(("2-"+$30),'i'))?_c('v-uni-label',{key:item['k0'],attrs:{"_i":("2-"+$30)}}):_e()]})],2)}`
`with(this){return _c('div',{attrs:{"_i":0}},[_l((_$g(1,'f')),function(item,$10,$20,$30){return [(_$g(("2-"+$30),'i'))?_c('span',{key:item['k0'],attrs:{"_i":("2-"+$30)}}):_e()]})],2)}`
)
})
it('generate events with multiple statements', () => {
assertCodegen(
'<div>A{{ d | e | f }}B{{text}}C</div>',
`with(this){return _c('v-uni-view',{attrs:{"_i":0}},[_v("A"+(_$g(0,'t0'))+"B"+(_$g(0,'t1'))+"C")])}`
`with(this){return _c('div',{attrs:{"_i":0}},[_v("A"+(_$g(0,'t0'))+"B"+(_$g(0,'t1'))+"C")])}`
)
})
it('generate slot fallback content', () => {
assertCodegen(
'<div><slot><div>{{hi}}</div></slot></div>',
`with(this){return _c('v-uni-view',{attrs:{"_i":0}},[_t("default",[_c('v-uni-view',{attrs:{"_i":2}},[_v((_$g(2,'t0')))])],{"_i":1})],2)}`
`with(this){return _c('div',{attrs:{"_i":0}},[_t("default",[_c('div',{attrs:{"_i":2}},[_v((_$g(2,'t0')))])],{"_i":1})],2)}`
)
})
it('generate v-slot', () => {
......@@ -60,14 +60,14 @@ describe('codegen', () => {
it('generate wxs props', () => {
assertCodegen(
'<p :change:prop="swipe.sizeReady" :prop="pos" @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change"></p>',
`with(this){return _c('v-uni-view',{wxsProps:{"change:prop":"pos"},attrs:{"change:prop":swipe.sizeReady,"prop":_$gc(0,'change:pos'),"_i":0},on:{"touchstart":function($event){$event = $handleWxsEvent($event);swipe.touchstart($event, $getComponentDescriptor())},"touchmove":function($event){$event = $handleWxsEvent($event);swipe.touchmove($event, $getComponentDescriptor())},"touchend":function($event){$event = $handleWxsEvent($event);swipe.touchend($event, $getComponentDescriptor())},"change":function($event){return $handleViewEvent($event)}}})}`
`with(this){return _c('p',{wxsProps:{"change:prop":"pos"},attrs:{"change:prop":swipe.sizeReady,"prop":_$gc(0,'change:pos'),"_i":0},on:{"touchstart":function($event){$event = $handleWxsEvent($event);swipe.touchstart($event, $getComponentDescriptor())},"touchmove":function($event){$event = $handleWxsEvent($event);swipe.touchmove($event, $getComponentDescriptor())},"touchend":function($event){$event = $handleWxsEvent($event);swipe.touchend($event, $getComponentDescriptor())},"change":function($event){return $handleViewEvent($event)}}})}`
)
})
// TODO 后续优化dataset
// it('generate dataset', () => {
// assertCodegen(
// '<view data-a="1" :data-b="b"></view>',
// `with(this){return _c('v-uni-view',{attrs:{"_i":0}})}`
// `with(this){return _c('div',{attrs:{"_i":0}})}`
// )
// })
it('generate dataset', () => {
......
......@@ -209,11 +209,11 @@ function handleViewEvents (events) {
function genVModel (el, isScopedSlot) {
if (el.model) {
el.model.value = createGenVar(el.attrsMap[ID], isScopedSlot)('v-model', el.model.value)
if (el.tag === 'v-uni-input' || el.tag === 'v-uni-textarea') {
el.model.callback = `function($$v){$handleVModelEvent(${el.attrsMap[ID]},$$v)}`
} else {
el.model.callback = `function(){}`
}
// if (el.tag === 'v-uni-input' || el.tag === 'v-uni-textarea') {
// el.model.callback = `function($$v){$handleVModelEvent(${el.attrsMap[ID]},$$v)}`
// } else {
el.model.callback = `function(){}`
// }
}
}
......
......@@ -110,6 +110,15 @@ const v3 = {
}]
})
if (isAppService) {
rules.push({
test: [/\.css$/, /\.p(ost)?css$/, /\.scss$/, /\.sass$/, /\.less$/, /\.styl(us)?$/],
use: [{
loader: path.resolve(__dirname, '../../packages/webpack-uni-app-loader/service/style.js')
}]
})
}
const entry = {}
if (isAppService) {
entry['app-service'] = path.resolve(process.env.UNI_INPUT_DIR, getMainEntry())
......@@ -281,6 +290,12 @@ const v3 = {
}
}
if (isAppService) { // service 层移除 css 相关
['css', 'postcss', 'scss', 'sass', 'less', 'stylus'].forEach(cssLang => {
webpackConfig.module.rules.delete(cssLang)
})
}
webpackConfig.plugins.delete('hmr')
webpackConfig.plugins.delete('html')
webpackConfig.plugins.delete('copy')
......
module.exports = function(source, map) {
console.warn(
`App平台 v3 模式暂不支持在 js 文件中引用"${this._module && this._module.rawRequest || this.resourcePath}"`
)
return ''
}
......@@ -103,7 +103,7 @@ module.exports = function(source, map) {
import 'uni-pages?${JSON.stringify({type:'view'})}'
function initView(){
${getStylesCode(this)}
injectStyles()
typeof injectStyles ==='function' && injectStyles()
${getDefineComponents(parseComponents(source, traverse)).join('\n')}
UniViewJSBridge.publishHandler('webviewReady')
}
......
......@@ -50,7 +50,7 @@ function getNodeInfo (el, fields) {
info.left = rect.left
info.right = rect.right
info.top = rect.top - top
info.bottom = rect.bottom
info.bottom = rect.bottom - top
}
if (fields.size) {
info.width = rect.width
......
......@@ -77,7 +77,7 @@ export default function parseBaseComponent (vueComponentOptions, {
}
},
detached () {
this.$vm.$destroy()
this.$vm && this.$vm.$destroy()
}
},
pageLifetimes: {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册