Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在angularjs中将url id重命名为可读格式_Angularjs_Firebase_Angularjs Routing - Fatal编程技术网

在angularjs中将url id重命名为可读格式

在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时,将获得正确的帖

我使用firebase自动生成id在firebase中存储每个帖子。比如说
-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));