I didn't understand how using $location or $window solves making the link appear on the DOM so it can be copied or opened in a new tab.

Are you suggesting that the controller would only return the URL as string, and wouldn't perform the navigation itself?