Overload UriHelper to forceLoad the page (imported from Blazor PR 1154) (#4786)
This commit is contained in:
parent
8fbb9fb0e6
commit
93127b39e8
|
|
@ -41,9 +41,10 @@ function enableNavigationInterception(assemblyName: string, functionName: string
|
|||
window.addEventListener('popstate', handleInternalNavigation);
|
||||
}
|
||||
|
||||
export function navigateTo(uri: string) {
|
||||
export function navigateTo(uri: string, forceLoad: boolean) {
|
||||
const absoluteUri = toAbsoluteUri(uri);
|
||||
if (isWithinBaseUriSpace(absoluteUri)) {
|
||||
|
||||
if (!forceLoad && isWithinBaseUriSpace(absoluteUri)) {
|
||||
performInternalNavigation(absoluteUri);
|
||||
} else {
|
||||
location.href = uri;
|
||||
|
|
|
|||
|
|
@ -47,14 +47,14 @@ namespace Microsoft.AspNetCore.Components.Browser.Services
|
|||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void NavigateToCore(string uri)
|
||||
protected override void NavigateToCore(string uri, bool forceLoad)
|
||||
{
|
||||
if (uri == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(uri));
|
||||
}
|
||||
|
||||
((IJSInProcessRuntime)JSRuntime.Current).Invoke<object>(Interop.NavigateTo, uri);
|
||||
((IJSInProcessRuntime)JSRuntime.Current).Invoke<object>(Interop.NavigateTo, uri, forceLoad);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -61,14 +61,10 @@ namespace Microsoft.AspNetCore.Components.Server.Circuits
|
|||
uriHelper.TriggerOnLocationChanged();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Navigates to the specified URI.
|
||||
/// </summary>
|
||||
/// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
|
||||
/// (as returned by <see cref="IUriHelper.GetBaseUri"/>).</param>
|
||||
protected override void NavigateToCore(string uri)
|
||||
/// <inheritdoc />
|
||||
protected override void NavigateToCore(string uri, bool forceLoad)
|
||||
{
|
||||
_jsRuntime.InvokeAsync<object>(Interop.NavigateTo, uri);
|
||||
_jsRuntime.InvokeAsync<object>(Interop.NavigateTo, uri, forceLoad);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,5 +51,13 @@ namespace Microsoft.AspNetCore.Components.Services
|
|||
/// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
|
||||
/// (as returned by <see cref="GetBaseUri"/>).</param>
|
||||
void NavigateTo(string uri);
|
||||
|
||||
/// <summary>
|
||||
/// Navigates to the specified URI.
|
||||
/// </summary>
|
||||
/// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
|
||||
/// (as returned by <see cref="GetBaseUri"/>).</param>
|
||||
/// <param name="forceLoad">If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router.</param>
|
||||
void NavigateTo(string uri, bool forceLoad);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,8 +46,7 @@ namespace Microsoft.AspNetCore.Components.Services
|
|||
/// (as returned by <see cref="GetBaseUri"/>).</param>
|
||||
public void NavigateTo(string uri)
|
||||
{
|
||||
EnsureInitialized();
|
||||
NavigateToCore(uri);
|
||||
NavigateTo(uri, forceLoad: false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -55,7 +54,20 @@ namespace Microsoft.AspNetCore.Components.Services
|
|||
/// </summary>
|
||||
/// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
|
||||
/// (as returned by <see cref="GetBaseUri"/>).</param>
|
||||
protected abstract void NavigateToCore(string uri);
|
||||
/// <param name="forceLoad">If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router.</param>
|
||||
public void NavigateTo(string uri, bool forceLoad)
|
||||
{
|
||||
EnsureInitialized();
|
||||
NavigateToCore(uri, forceLoad);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Navigates to the specified URI.
|
||||
/// </summary>
|
||||
/// <param name="uri">The destination URI. This can be absolute, or relative to the base URI
|
||||
/// (as returned by <see cref="GetBaseUri"/>).</param>
|
||||
/// <param name="forceLoad">If true, bypasses client-side routing and forces the browser to load the new page from the server, whether or not the URI would normally be handled by the client-side router.</param>
|
||||
protected abstract void NavigateToCore(string uri, bool forceLoad);
|
||||
|
||||
/// <summary>
|
||||
/// Called to initialize BaseURI and current URI before those values the first time.
|
||||
|
|
|
|||
|
|
@ -268,9 +268,33 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests
|
|||
SetUrlViaPushState("/");
|
||||
|
||||
var app = MountTestComponent<TestRouter>();
|
||||
app.FindElement(By.TagName("button")).Click();
|
||||
var testSelector = WaitUntilTestSelectorReady();
|
||||
|
||||
app.FindElement(By.Id("do-navigation")).Click();
|
||||
WaitAssert.True(() => Browser.Url.EndsWith("/Other"));
|
||||
WaitAssert.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text);
|
||||
AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)");
|
||||
|
||||
// Because this was client-side navigation, we didn't lose the state in the test selector
|
||||
Assert.Equal(typeof(TestRouter).FullName, testSelector.SelectedOption.GetAttribute("value"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanNavigateProgrammaticallyWithForceLoad()
|
||||
{
|
||||
SetUrlViaPushState("/");
|
||||
|
||||
var app = MountTestComponent<TestRouter>();
|
||||
var testSelector = WaitUntilTestSelectorReady();
|
||||
|
||||
app.FindElement(By.Id("do-navigation-forced")).Click();
|
||||
WaitAssert.True(() => Browser.Url.EndsWith("/Other"));
|
||||
|
||||
// Because this was a full-page load, our element references should no longer be valid
|
||||
Assert.Throws<StaleElementReferenceException>(() =>
|
||||
{
|
||||
testSelector.SelectedOption.GetAttribute("value");
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
|||
|
|
@ -13,10 +13,14 @@
|
|||
<li><NavLink href="/subdir/WithParameters/Name/Abc/LastName/McDef">With parameters</NavLink></li>
|
||||
</ul>
|
||||
|
||||
<button onclick=@(x => uriHelper.NavigateTo("Other"))>
|
||||
<button id="do-navigation" onclick=@(x => uriHelper.NavigateTo("Other"))>
|
||||
Programmatic navigation
|
||||
</button>
|
||||
|
||||
<button id="do-navigation-forced" onclick=@(x => uriHelper.NavigateTo("Other", true))>
|
||||
Programmatic navigation with force-load
|
||||
</button>
|
||||
|
||||
<a id="anchor-with-no-href">
|
||||
Anchor tag with no href attribute
|
||||
</a>
|
||||
|
|
|
|||
Loading…
Reference in New Issue