AngularFire - 如何使用ng-repeat定义子模板的项ID?

时间:2015-07-10 16:44:58

标签: javascript angularjs ionic angularfire

也许我的问题似乎很容易解决,但是我在很长时间内遇到了这个问题:当我在我的信息中心时,我的Firebase数据库的所有数据都可见(使用Ng-repeat)。 但我找不到选择一个特定项目的解决方案,并在另一个页面中查看他的详细信息。

我在HTML中测试了这个方法(这是一个例子):

<div ng-repeat="post in posts">

<div class="card" ng-href="#/post/">">
<h1>{{post.title}}</h1>
<p>{{post.content}}</p>
</div>

</div>

在App JS中:

  .state('tabpost', {
  url: 'tabpost/id',
  templateUrl: 'templates/tab-post.html',
  controller: 'PostCtrl'
  })

在Service JS中(在Post Factory中):

 myApp.factory("Post", ["$firebaseArray", "$firebaseObject", function($firebaseArray, $firebaseObject) {
var postRef = new Firebase('https://myApp.firebaseio.com/Posts/');
var userRef = new Firebase('https://myApp.firebaseio.com/Users/');
var posts = $firebaseArray(postRef);

     var Post = {

         all: posts,

         get: function (postKey){
          var postId = $firebaseObject(postRef);
                return $firebaseObject(eventRef.child('Posts').child(postId).child(userid));

              }
            ,
        add: function (post){
          var postId = $firebaseArray(postRef, userRef);
          event.userid = userRef.getAuth();
                return postId.$add(post);
              }
       }
       return Post;

}]);

我的PostCtrl:

myApp.controller('PostCtrl', ['$ionicFrostedDelegate', '$ionicScrollDelegate','$state','$scope', 'Post', 'Auth', '$firebaseObject', '$firebaseArray', function($ionicFrostedDelegate, $ionicScrollDelegate, $state,$scope, Post, Auth, $firebaseObject, $firebaseArray) {

  var PostRef = new Firebase("https://myApp.firebaseio.com/Posts");

  $scope.posts = Post.all;

  $scope.post = {'title': '', 'content': ''};

  $scope.auth = Auth;
PS:花了16个小时才尝试了大量过时的教程,我确信解决方案不会那么简单。

昨天和今天早上我已经发布了两个类似的问题但是每个提议的解决方案都没有奏效。我非常感谢能够帮助我摆脱这种僵局的人。

我仍然有一点麻烦jsFiddle承诺,一旦我解决了这个问题,我会学会使用它。

感谢您给我时间

2 个答案:

答案 0 :(得分:0)

您能否尝试以下一组代码,我已在Controller中解释了注释中的更改,并在App JS中添加了:id

在App JS中:

  .state('tabpost', {
  url: 'tabpost/:id',
  templateUrl: 'templates/tab-post.html',
  controller: 'PostCtrl'
  })

PostCtrl:

myApp.controller('PostCtrl', ['$ionicFrostedDelegate', '$ionicScrollDelegate','$state','$scope', 'Post', 'Auth', '$firebaseObject', '$firebaseArray', '$routeParams', function($ionicFrostedDelegate, $ionicScrollDelegate, $state,$scope, Post, Auth, $firebaseObject, $firebaseArray, $routeParams) {

  var PostRef = new Firebase("https://myApp.firebaseio.com/Posts");

  var id = $routeParams.id; //get the id from url, $routeParams is injected in controller

  $scope.posts = Post.get(id); //call get() method of Post with the id retrieved

  $scope.post = {'title': '', 'content': ''};

  $scope.auth = Auth;

答案 1 :(得分:0)

你可以使用路由提供商来做到这一点。我将它用于我的应用程序并且效果很好。

myApp.config( ['$routeProvider', function($routeProvider){
    $routeProvider.
        when('tabpost', {
            templateUrl: 'tabpost/id', 
            controller: 'PostCtrl' 
        });
}]);