transform,
ErrorCodes,
BindingTypes,
- NodeTransform
+ NodeTransform,
+ transformExpression
} from '../../src'
import {
RESOLVE_COMPONENT,
})
})
+ test(`props merging: style w/ transformExpression`, () => {
+ const { node, root } = parseWithElementTransform(
+ `<div style="color: green" :style="{ color: 'red' }" />`,
+ {
+ nodeTransforms: [transformExpression, transformStyle, transformElement],
+ directiveTransforms: {
+ bind: transformBind
+ },
+ prefixIdentifiers: true
+ }
+ )
+ expect(root.helpers).toContain(NORMALIZE_STYLE)
+ expect(node.props).toMatchObject({
+ type: NodeTypes.JS_OBJECT_EXPRESSION,
+ properties: [
+ {
+ type: NodeTypes.JS_PROPERTY,
+ key: {
+ type: NodeTypes.SIMPLE_EXPRESSION,
+ content: `style`,
+ isStatic: true
+ },
+ value: {
+ type: NodeTypes.JS_CALL_EXPRESSION,
+ callee: NORMALIZE_STYLE
+ }
+ }
+ ]
+ })
+ })
+
test(`props merging: class`, () => {
const { node, root } = parseWithElementTransform(
`<div class="foo" :class="{ bar: isBar }" />`,
!isStaticExp(styleProp.value) &&
// the static style is compiled into an object,
// so use `hasStyleBinding` to ensure that it is a dynamic style binding
- hasStyleBinding
+ (hasStyleBinding ||
+ // v-bind:style and style both exist,
+ // v-bind:style with static literal object
+ styleProp.value.type === NodeTypes.JS_ARRAY_EXPRESSION)
) {
styleProp.value = createCallExpression(
context.helper(NORMALIZE_STYLE),