})
})
})
+
+ test('should remove attribute for `null`', () => {
+ const { ast } = compileWithStringify(
+ `<div>${repeat(
+ `<span :title="null"></span>`,
+ StringifyThresholds.ELEMENT_WITH_BINDING_COUNT
+ )}</div>`
+ )
+ expect(ast.hoists[0]).toMatchObject({
+ type: NodeTypes.JS_CALL_EXPRESSION,
+ callee: CREATE_STATIC,
+ arguments: [
+ JSON.stringify(
+ `${repeat(
+ `<span></span>`,
+ StringifyThresholds.ELEMENT_WITH_BINDING_COUNT
+ )}`
+ ),
+ '5'
+ ]
+ })
+ })
})
} else if (p.type === NodeTypes.DIRECTIVE && p.name === 'bind') {
// constant v-bind, e.g. :foo="1"
let evaluated = evaluateConstant(p.exp as SimpleExpressionNode)
- const arg = p.arg && (p.arg as SimpleExpressionNode).content
- if (arg === 'class') {
- evaluated = normalizeClass(evaluated)
- } else if (arg === 'style') {
- evaluated = stringifyStyle(normalizeStyle(evaluated))
+ if (evaluated != null) {
+ const arg = p.arg && (p.arg as SimpleExpressionNode).content
+ if (arg === 'class') {
+ evaluated = normalizeClass(evaluated)
+ } else if (arg === 'style') {
+ evaluated = stringifyStyle(normalizeStyle(evaluated))
+ }
+ res += ` ${(p.arg as SimpleExpressionNode).content}="${escapeHtml(
+ evaluated
+ )}"`
}
- res += ` ${(p.arg as SimpleExpressionNode).content}="${escapeHtml(
- evaluated
- )}"`
}
}
if (context.scopeId) {