2014-09-06 29 views
0

在我的角度應用程序,我希望用戶能夠書籤一個特定的URL,與對象建模,例如這一個:

$scope.state = { 
    selected : ["a", "b", "c"], 
    yearOptions : [{ year: 1910, options : {color : "green"} } ] 
} 

一)如何更新網址動態反映$scope.state
二)如何設置$scope.state使用任何初始網址參數?

回答

0

URL長度限制爲1024個符號,所以不能保證用戶將能夠保存任何對象URL。但是你可以嘗試使用JSON.stringify()

$location.search({state: JSON.stringify($scope.state)});

但這是錯誤的設計。如果用戶點擊頁面上的鏈接並且它將改變範圍的狀態並且鏈接將以自然順序改變,則會更好。

+0

我同意。有一件事是可能的,就是在加入書籤的URL中加入一個密鑰。該密鑰的值可以存儲在別處(數據庫甚至瀏覽器會話存儲,這很有趣)。 – 2014-09-06 21:46:35

1

我已經寫了這我試圖打開它同步的網址參數範圍內的變量源工作的解決方案。您要求的內容很容易實現,並且在爲書籤或共享網址時非常有用。

所有你需要做的是建立在變量$手錶,使用$ location.search()的範圍變量設置爲URL參數。其次,在初始頁面加載時,您需要使用$ location.search()來獲取url參數並將其設置爲範圍變量。這不應該很難在控制器中工作,或者嘗試編寫服務來使其具有通用性。

爲了保持URL好看,我用了一個簡單的字典映射範圍變量名的URL參數名稱。

爲了讓你開始:

$scope.$watch('selected', function(newVal, oldVal) { 
    if(newVal != oldVal) { 
     $location.search('selected', newVal); 
    } 
});