在angularjs中将url id重命名为可读格式
我使用firebase自动生成id在firebase中存储每个帖子。比如说在angularjs中将url id重命名为可读格式,angularjs,firebase,angularjs-routing,Angularjs,Firebase,Angularjs Routing,我使用firebase自动生成id在firebase中存储每个帖子。比如说-JBuEJXgILubWjxECjwj 然后我像这样询问帖子 Post.getPost($routeParams.postID)//代码片段 因此,当用户访问example.com/userid/-JBuEJXgILubWjxECjwj时,将显示内容。但我希望url可读 当用户访问example.com/userid/mystory或example/userid/-JBuEJXgILubWjxECjwj时,将获得正确的帖
-JBuEJXgILubWjxECjwj
然后我像这样询问帖子
Post.getPost($routeParams.postID)//代码片段
因此,当用户访问example.com/userid/-JBuEJXgILubWjxECjwj
时,将显示内容。但我希望url可读
当用户访问example.com/userid/mystory
或example/userid/-JBuEJXgILubWjxECjwj
时,将获得正确的帖子
如何在url中将id重命名为标题
更新
基本上,这就是我在firebase中存储数据的方式
posts: {
randomID1: {
title: 'This is post 1'
},
randomID2: {
title: 'This is post 2
}
}
然后,我使用javascript api($firebase)进行查询
我认为查询代码是正常的,只是我的数据存储方式让我将id转换为标题。
有什么想法吗?下面是如何将标题转换为URL段塞,然后查找Id(Fiddle:): 要将其与路由器一起使用,请执行以下操作:
var postId = getPostId($routeParams.slug);
$scope.post = $firebase(new Firebase.child('posts/').child(postID));
你能保存一个id和URL段塞的键值存储,在任何导航中使用段塞,并在需要发布帖子时在存储中查找id吗?@imcg你能给我一个如何查找的示例吗?我不熟悉firebase,但如果你发布一些你正在使用的代码,我会尝试。@imcg我更新了qeustion,请看一看。谢谢,这很复杂。我先跳过。我在那里的时候会告诉你的。是的,我确信在应用程序的上下文中它要复杂得多。祝你好运这假设你已经从firebase下载了所有帖子,对吗?
var posts = {
randomID1: {
title: 'This is post 1'
},
randomID2: {
title: 'This is post 2'
}
};
// find id from slug in posts
function getPostId(slug) {
for(var i in posts) {
// match id or slug so both URL forms are supported
if(i === slug || posts[i].slug === slug) {
return i;
}
}
return null;
}
// create slugs and add them to post objects
for(var i in posts) {
var p = posts[i];
// create slug by replacing characters in title. TODO: handle posts with same title, maybe by appending a number
p.slug = p.title.replace(/\W/g, '').toLowerCase();
// make a link to the post
var link = document.createElement('li');
link.innerText = p.title;
link.setAttribute('id', p.slug);
link.onclick = function() {
var slug = this.getAttribute('id');
alert('slug:' + slug + ' id:' + getPostId(slug));
};
document.body.appendChild(link);
}
var postId = getPostId($routeParams.slug);
$scope.post = $firebase(new Firebase.child('posts/').child(postID));