我定义了一个$routeProvider
,为路由添加access
:
$routeProvider.when('/tracks/:trackTitle/:mediaTitle',
{
templateUrl: 'views/track-detail.html',
controller: 'MediaCtrl',
access: access.user
...
}
我正在收听$routeChangeStart
更改事件并检查用户是否可以访问该页面。如果不是我在cookiestore中保存路由并在用户登录后加载它。
$rootScope.$on("$routeChangeStart", function (event, next, current) {
$rootScope.error = null;
if (!Auth.authorize(next.access)) {
if (!Auth.isLoggedIn())
$cookieStore.put('current.user.originalPath', originalPath);
$location.path('/signup');
}});
问题是next
对象由于某种原因在来自cookiestore的put和get之间发生了变化。
在下一个$cookieStore.put
之前:
$$route: Object
params: Object
pathParams: Object
__proto__: Object
当我使用$cookieStore.get
获取对象时,值为
params: Object
pathParams: Object
__proto__: Object
我正在获取没有$$ route对象的对象。
为什么会这样,我该如何解决?
答案 0 :(得分:1)
这是因为值是" JSONified"在进入cookie商店之前由Angular提供
Angular的toJson()
方法忽略以$
开头的所有属性。
你可以使用JSON.stringify()
(而不是Angular' s toJson()
)来传递价值" JSONified"或将属性$$route
重命名为route
(或任何不以$
开头的内容。)
不幸的是,因为价值是" JSONified"不可能存储各种特性。
例如。函数或非JSONifiable对象(窗口,范围,节点等)不会被保留。
另请参阅此 short demo 。
我怀疑你确实需要整个$$route
对象,所以我建议你只存储你感兴趣的属性(例如path,pathParams等)。