diff --git a/src/qweb_extensions.ts b/src/qweb_extensions.ts
index f9de2b0a..68d8b0e8 100644
--- a/src/qweb_extensions.ts
+++ b/src/qweb_extensions.ts
@@ -705,11 +705,13 @@ QWeb.addDirective({
ctx.addLine(
`const slot${slotKey} = this.slots[context.__owl__.slotId + '_' + '${value}'];`
);
+ ctx.addIf(`slot${slotKey}`)
ctx.addLine(
`slot${slotKey}(context.__owl__.parent, Object.assign({}, extra, {parentNode: c${
ctx.parentNode
}}));`
);
+ ctx.closeIf();
return true;
}
});
diff --git a/tests/__snapshots__/component.test.ts.snap b/tests/__snapshots__/component.test.ts.snap
index ab361803..2c78cdee 100644
--- a/tests/__snapshots__/component.test.ts.snap
+++ b/tests/__snapshots__/component.test.ts.snap
@@ -1083,12 +1083,16 @@ exports[`t-slot directive can define and call slots 2`] = `
var vn2 = h('div', p2, c2);
c1.push(vn2);
const slot3 = this.slots[context.__owl__.slotId + '_' + 'header'];
- slot3(context.__owl__.parent, Object.assign({}, extra, {parentNode: c2}));
+ if (slot3) {
+ slot3(context.__owl__.parent, Object.assign({}, extra, {parentNode: c2}));
+ }
let c4 = [], p4 = {key:4};
var vn4 = h('div', p4, c4);
c1.push(vn4);
const slot5 = this.slots[context.__owl__.slotId + '_' + 'footer'];
- slot5(context.__owl__.parent, Object.assign({}, extra, {parentNode: c4}));
+ if (slot5) {
+ slot5(context.__owl__.parent, Object.assign({}, extra, {parentNode: c4}));
+ }
return vn1;
}"
`;
diff --git a/tests/component.test.ts b/tests/component.test.ts
index a52b95fc..99b5566c 100644
--- a/tests/component.test.ts
+++ b/tests/component.test.ts
@@ -3031,6 +3031,30 @@ describe("t-slot directive", () => {
);
});
+ test("missing slots are ignored", async () => {
+ env.qweb.addTemplates(`
+