})
})
+ test(':style with array literal', () => {
+ const { node, root } = parseWithElementTransform(
+ `<div :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 }" />`,
}
if (
styleProp &&
- !isStaticExp(styleProp.value) &&
// the static style is compiled into an object,
// so use `hasStyleBinding` to ensure that it is a dynamic style binding
(hasStyleBinding ||
+ (styleProp.value.type === NodeTypes.SIMPLE_EXPRESSION &&
+ styleProp.value.content.trim()[0] === `[`) ||
// v-bind:style and style both exist,
// v-bind:style with static literal object
styleProp.value.type === NodeTypes.JS_ARRAY_EXPRESSION)