Why doesn’t NavigationMixin work in Lightning Modal or Child Components?

Question:
When using NavigationMixin
within a child component or in a Lightning modal, the GenerateUrl
method doesn’t seem to work as expected. The result returned by the promise is null
, and I’m not sure if this is the designed behavior or an issue. Here’s an example of the test code I used within a parent component that demonstrates the result:
import { LightningElement, api } from "lwc";
import { NavigationMixin } from "lightning/navigation";
const TARGET_BLANK = "_blank";
export default class GetRecordPageUrl extends NavigationMixin(LightningElement) {
@api recordId;
@api label;
@api target = TARGET_BLANK;
@api state;
@api replaceCurrentPage = false;
url;
connectedCallback() {
const recordPageRef = {
type: "standard__recordPage",
attributes: {
recordId: this.recordId,
actionName: "view"
}
};
if (this.state) {
recordPageRef.state = this.state;
}
this[NavigationMixin.GenerateUrl](recordPageRef, this.replaceCurrentPage).then((url) => {
this.url = url;
});
}
}
HTML:
<template>
<a target={target} href={url} title={label}>{label}</a>
</template>
Why is the GenerateUrl
method returning null
, and is there a workaround?
Answer
The issue arises because the NavigationMixin
doesn’t work as expected within LWCs that extend LightningElement
. This is a known behavior and is typically seen in Lightning modals or child components. The result is that GenerateUrl
does not provide the URL, and it returns null
.
Master Salesforce with expert-led training at CRS Info Solutions in Salesforce training in Hyderabad. Gain hands-on experience in Admin, Developer (Apex), and Integration—join a free demo today!!!
A straightforward workaround to this issue is to hardcode the URL instead of relying on GenerateUrl
. You can construct the URL manually as follows:
this.url = `/lightning/r/${this.recordId}/view`;
This approach ensures that the URL for the record page is constructed and works as expected without depending on NavigationMixin
. While this isn’t the most dynamic solution, it provides a simple and effective way around the issue when GenerateUrl
isn’t functioning correctly.
Summing Up
The NavigationMixin.GenerateUrl
method doesn’t work as expected within child components or Lightning modals, returning null
instead of a valid URL. This issue occurs because NavigationMixin
doesn’t function properly when extending LightningElement
. A simple workaround is to manually construct the URL by hardcoding it, such as using /lightning/r/${this.recordId}/view
, which provides a reliable alternative to GenerateUrl
in these scenarios.
Launch Your Salesforce Career in Hyderabad’s Booming IT Hub
Hyderabad has emerged as a leading hub for IT and cloud technologies, with Salesforce driving digital transformation across industries. As businesses increasingly adopt Salesforce for CRM, AI, Integration, and Lightning solutions, the demand for skilled professionals continues to surge. Top companies like Deloitte, Accenture, Infosys, TCS, and Wipro actively hire certified Salesforce experts, making professional training a critical step toward securing high-paying job opportunities.
For those looking to build a successful career in Salesforce, choosing the right training institute is essential. CRS Info Solutions offers industry-focused Salesforce training in Ameerpet, covering all key modules, including Admin, Developer (Apex), and Integration. With hands-on projects and real-world scenarios, this expert-led program equips you with the skills needed to earn certification and excel in Hyderabad’s competitive job market. Now is the perfect time to invest in your future—enroll today and take the next step in your Salesforce journey!