在我的Angular应用程序中,我希望用户能够为特定URL添加书签,并使用以下对象建模:
$scope.state = {
selected : ["a", "b", "c"],
yearOptions : [{ year: 1910, options : {color : "green"} } ]
}
a)如何动态更新网址以反映$scope.state
?
b)如何使用任何初始URL参数设置$scope.state
?
答案 0 :(得分:1)
我已经编写了一个工作解决方案,我正在尝试开源,它将url参数与范围变量同步。您要求的内容很容易,在书签或共享网址时非常有用。
您需要做的就是在变量上设置$ watch并使用$ location.search()将范围变量设置为url参数。其次,在初始页面加载时,您需要使用$ location.search()来获取url参数并将其设置为范围变量。这不应该很难在控制器中工作,或尝试编写服务以使其通用。
为了保持网址看起来不错,我使用了一个简单的字典来将范围变量名称映射到url参数名称。
为了帮助您入门:
$scope.$watch('selected', function(newVal, oldVal) {
if(newVal != oldVal) {
$location.search('selected', newVal);
}
});
答案 1 :(得分:0)
网址长度限制为1024个符号,因此无法保证用户能够在网址中保存任何对象。但您可以尝试使用JSON.stringify()
:
$location.search({state: JSON.stringify($scope.state)});
但这是错误的设计。如果用户点击页面上的链接并且它将改变范围的状态,链接将按照自然顺序进行更改,那就更好了。