$ scope对象到URL?

时间:2014-09-06 19:45:02

标签: javascript angularjs

在我的Angular应用程序中,我希望用户能够为特定URL添加书签,并使用以下对象建模:

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

a)如何动态更新网址以反映$scope.state
b)如何使用任何初始URL参数设置$scope.state

2 个答案:

答案 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)});

但这是错误的设计。如果用户点击页面上的链接并且它将改变范围的状态,链接将按照自然顺序进行更改,那就更好了。