diff --git a/packages/vue/src/components/IonNav.ts b/packages/vue/src/components/IonNav.ts
index 437734d159..47124a19ff 100644
--- a/packages/vue/src/components/IonNav.ts
+++ b/packages/vue/src/components/IonNav.ts
@@ -4,7 +4,7 @@ import { defineComponent, h, shallowRef } from "vue";
import { VueDelegate } from "../framework-delegate";
-export const IonNav = /*@__PURE__*/ defineComponent(() => {
+export const IonNav = /*@__PURE__*/ defineComponent((props) => {
defineCustomElement();
const views = shallowRef([]);
@@ -19,8 +19,39 @@ export const IonNav = /*@__PURE__*/ defineComponent(() => {
const delegate = VueDelegate(addView, removeView);
return () => {
- return h("ion-nav", { delegate }, views.value);
+ return h("ion-nav", { ...props, delegate }, views.value);
};
});
IonNav.name = "IonNav";
+
+/**
+ * The default values follow what is defined at
+ * https://ionicframework.com/docs/api/nav#properties
+ * otherwise the default values on the Web Component
+ * may be overridden. For example, if the default animated value
+ * is not `true` below, then Vue would default the prop to `false`
+ * which would override the Web Component default of `true`.
+ */
+IonNav.props = {
+ animated: {
+ type: Boolean,
+ default: true,
+ },
+ animation: {
+ type: Function,
+ default: undefined,
+ },
+ root: {
+ type: [Function, Object, String],
+ default: undefined,
+ },
+ rootParams: {
+ type: Object,
+ default: undefined,
+ },
+ swipeGesture: {
+ type: Boolean,
+ default: undefined,
+ },
+};
diff --git a/packages/vue/test/base/src/components/Nav.vue b/packages/vue/test/base/src/components/Nav.vue
index f4ca025094..69dc6d7175 100644
--- a/packages/vue/test/base/src/components/Nav.vue
+++ b/packages/vue/test/base/src/components/Nav.vue
@@ -1,16 +1,12 @@
-
+
-
diff --git a/packages/vue/test/base/src/components/NavRoot.vue b/packages/vue/test/base/src/components/NavRoot.vue
index ec2fe1c513..ffd18e6765 100644
--- a/packages/vue/test/base/src/components/NavRoot.vue
+++ b/packages/vue/test/base/src/components/NavRoot.vue
@@ -8,11 +8,14 @@
- Go to Nav Child
+ Message: {{ message }}
+ Go to Nav Child
-
diff --git a/packages/vue/test/base/tests/e2e/specs/navigation.cy.js b/packages/vue/test/base/tests/e2e/specs/navigation.cy.js
index d8f75e7163..25788bf759 100644
--- a/packages/vue/test/base/tests/e2e/specs/navigation.cy.js
+++ b/packages/vue/test/base/tests/e2e/specs/navigation.cy.js
@@ -10,4 +10,10 @@ describe('Navigation', () => {
cy.get('#nav-child-content').should('have.text', 'Custom Title');
});
+
+ it('nav should support kebab-case root-params', () => {
+ cy.get('#open-nav-modal').click();
+
+ cy.get('#nav-root-params').should('have.text', 'Message: Hello World!');
+ });
});