我正在製作一個房地產網站使用角2,谷歌地圖等,當用戶更改地圖的中心時,我執行搜索api,指出當前位置地圖以及半徑。事情是,我想在URL中反映這些值,而無需重新加載整個頁面。那可能嗎?我發現了一些使用AngularJS 1.x的解決方案,但沒有任何關於角度2.更改路線參數,無需重新加載角2 2
回答
你可以使用location.go(url)
這將基本上改變你的網址,而不會改變應用程序的路線。
NOTE this could cause other effect like redirect to child route from the current route.
Related question描述location.go
不會貼心Router
發生變化。
它的工作就像一個魅力!現在我有其他的事情要處理,但更改網址已不再是那些。謝謝! –
@MarcosBasualdo很高興知道...謝謝:) **但這可能會影響其他事情**,從技術上講,它與你正在做的事情沒有任何關係..你只參考你的路由參數嗎? –
我的意思是說你只是在改變路由參數嗎? –
我在使用angular2的RCx版本時遇到了很大的麻煩。位置包已移動,並且在構造函數()內運行location.go()將無法工作。它需要在生命週期中是ngOnInit()或更高版本。下面是一些示例代碼:
import {OnInit} from '@angular/core';
import {Location} from '@angular/common';
@Component({
selector: 'example-component',
templateUrl: 'xxx.html'
})
export class ExampleComponent implements OnInit
{
constructor(private location: Location)
{}
ngOnInit()
{
this.location.go('/example;example_param=917');
}
}
下面是關於此事的角資源: https://angular.io/docs/ts/latest/api/common/index/Location-class.html https://angular.io/docs/ts/latest/api/common/index/LocationStrategy-class.html
由於RC6你可以做以下更改URL沒有改變狀態,從而保持您的路線歷史
import {OnInit} from '@angular/core';
import {Location} from '@angular/common';
@Component({
selector: 'example-component',
templateUrl: 'xxx.html'
})
export class ExampleComponent implements OnInit
{
constructor(private location: Location)
{}
ngOnInit()
{
this.location.replaceState("/some/newstate/");
}
}
}爲我工作。它會嘗試加載路線。控制檯錯誤:'錯誤:未捕獲(承諾):錯誤:無法匹配任何路線。網址細分:'some/newstate'' – Inigo
將此與網址創建結合起來,就像@golfadas所建議的一樣,我們贏了! – crowmagnumb
對於像我這樣的人發現這個問題,以下可能會有用。
我有一個類似的問題,最初嘗試使用location.go和location.replaceState在這裏的其他答案建議。然而,當我不得不導航到應用程序中的另一個頁面時,我遇到了問題,因爲導航是相對於當前路線的,並且當前路線沒有被location.go或location.replaceState更新(路由器不知道任何東西這些對URL做了什麼)
實質上,我需要一個解決方案,當路由參數改變但DID在內部更新路由狀態時,DID不會重載頁面/組件。
我結束了使用查詢參數。你可以在這裏找到更多關於它的信息:https://angular-2-training-book.rangle.io/handout/routing/query_params.html
所以,如果你需要做點保存訂單和獲取訂單ID,你可以更新你的頁面URL,如下所示。在地圖上更新中心位置和相關數據將類似
// let's say we're saving an order. Initally the URL is just blah/orders
save(orderId) {
// [Here we would call back-end to save the order in the database]
this.router.navigate(['orders'], { queryParams: { id: orderId } });
// now the URL is blah/orders?id:1234. We don't reload the orders
// page or component so get desired behaviour of not seeing any
// flickers or resetting the page.
}
,你跟蹤它的ngOnInit方法中,如:
ngOnInit() {
this.orderId = this.route
.queryParamMap
.map(params => params.get('id') || null);
// orderID is up-to-date with what is saved in database now, or if
// nothing is saved and hence no id query paramter the orderId variable
// is simply null.
// [You can load the order here from its ID if this suits your design]
}
如果你需要去直接與訂購頁面一個新的(未保存的)命令,你可以這樣做:
this.router.navigate(['orders']);
或者,如果你需要去直接訂購頁面爲現有(保存)命令,你可以這樣做:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });
使用location.go(url)
是要走的路,但不要自己構建URL!使用router.createUrlTree()
。
想象一下,您在您的頁面上有此導航:this.router.navigate([{param: 1}], {relativeTo: this.activatedRoute})
但現在您不希望重新加載組件,只想設置URL上的參數。這可以通過連載的URL來實現:
const url = this
.router
.createUrlTree([{param: 1}], {relativeTo: this.activatedRoute})
.toString();
this.location.go(url);
這個答案解決了我的問題。有一個問題,上面生成的url使用由「;」(分號)分隔的參數。我們應該怎麼做才能將查詢中的每個參數與「&」分開? – Amarnath
對我來說,它實際上是兩個有角4.4.5混合。
使用router.navigate通過不尊重realtiveTo:activatedRoute部分而不斷破壞我的網址。
我已經結束了:
this._location.go(this._router.createUrlTree([this._router.url], { queryParams: { profile: value.id } }).toString())
- 1. 角2更改參數的路線
- 2. 角2路由器更改url無需重裝
- 3. 角2 - 如何通過在routerConfig routeparams無需重新加載
- 4. 重新加載后角度2網址的更改
- 5. URI更改無需重新加載?
- 6. 更改狀態,無需重新加載普通視圖,角度ui路由器。
- 7. 角2決賽 - 在URL上改變路線參數編程
- 8. 更新參數狀態,無需重新加載控制器
- 9. 如何設置或去除角2在當前的路線queryParams無需重新加載
- 10. 路由:收到通知參數更新,而無需重新加載視圖
- 11. 角2路由3.0.0-rc.2重複路線
- 12. 重定向,而無需加載在角2/4
- 13. 角2路線不重裝組件
- 14. 如何重新加載頁面角2 2
- 15. 角2找不到刷新路線
- 16. 在角度2我無法重新加載子組件之間的路由
- 17. 更改數據時無法更新角度2中的模板
- 18. 角2路線與其他路線
- 19. 角2獲取路線PARAMS
- 20. 角2兒童路線
- 21. 角2路線不工作
- 22. 更新導航無需重新加載
- 23. jqPlot動畫數據更改無需重新加載圖形
- 24. 在Angular 2中更改當前路線上的單個路線參數
- 25. 加載/路由角2(官方V2.0.0)
- 26. 需要更改日期格式角2
- 27. 如何使用角度2路由器重新加載當前路由
- 28. 角度2丟失頁面重新加載的數據
- 29. 組件不會重新啓動查詢參數更改角度2
- 30. 角2 - 重新裝載組件的onChange
我認爲,如果你使用[routerLink] =「[ '/路線',{參數1:值1}]也不會重新加載 – Toolkit
網頁卻怎麼也我添加了另一個查詢參數? – Toolkit