Javascript Angularjs-Firebase显示当前登录用户';s数据

Javascript Angularjs-Firebase显示当前登录用户';s数据,javascript,angularjs,ionic-framework,firebase,Javascript,Angularjs,Ionic Framework,Firebase,我正在尝试通过ionic构建一个移动购物应用程序。我想显示用户添加到购物车中的项目。但在互联网上找不到任何方法。 有人能帮忙吗 app.js .constant('FURL', 'https://ecommayakkabi.firebaseio.com/') .state('tab.cart', { url: '/cart', cache: false, views: { 'tab-cart': { templateUrl: 't

我正在尝试通过ionic构建一个移动购物应用程序。我想显示用户添加到购物车中的项目。但在互联网上找不到任何方法。 有人能帮忙吗

app.js

.constant('FURL', 'https://ecommayakkabi.firebaseio.com/')
.state('tab.cart', {
    url: '/cart',
    cache: false,
    views: {
        'tab-cart': {
            templateUrl: 'templates/tab-cart.html',
            controller: 'CartCtrl'
        }
    }
});
controller.js

.controller('CartCtrl', function ($scope, $state, $cordovaOauth, $localStorage, $location, $http, $ionicPopup, $firebaseObject, Auth, FURL, Utils, basket) {
    var ref = new Firebase(FURL); --
    var user=ref.getAuth();
    if (user==null){
        console.log ('Should log in ');
        $state.go('login');
    } else {
        console.log ('loged ' + user.password.email);
        // can show here user's basket items but how?
    } 
});
services.js

  .factory("basket", function($firebaseArray) {
      var itemsRef = new Firebase("https://ecommayakkabi.firebaseio.com/items");
      return $firebaseArray(itemsRef);
  }) 
app.js

.constant('FURL', 'https://ecommayakkabi.firebaseio.com/')
.state('tab.cart', {
    url: '/cart',
    cache: false,
    views: {
        'tab-cart': {
            templateUrl: 'templates/tab-cart.html',
            controller: 'CartCtrl'
        }
    }
});

由于Firebase使用非规范化的数据模式,您需要将项目写入
/items/:userId
,这样您就可以通过用户id检索它们,而无需迭代所有
/items
路径,而且Firebase规则友好

因此,在向
items/
路径添加新项目的地方,将其更改为:

var ref = new Firebase("https://ecommayakkabi.firebaseio.com");
var userId = ref.getAuth().uid;
ref.child("items").child(userId).push(yourItemIsThere);
然后您可以通过以下方式检索:

var ref = new Firebase("https://ecommayakkabi.firebaseio.com");
var userItems = $firebaseArray(ref.child("items").child(user.uid));
您需要根据Firebase规则添加相应的更改,以便仅允许具有相应id(可选部分)的用户访问
项/:userId
路径,否则您的应用程序将不安全

Firebase规则示例:

{
  "rules": {
    ".read": false,
    ".write": false,
    "items": {
      "$userId": {
        ".write": "auth.uid === $userId",
        ".read": "auth.uid === $userId"
      }
    }
  }
}
根据您的评论,添加部件的完整代码为:

var ref = new Firebase(FURL);
ref.child("items").child(user.uid).push({
  "email": user.password.email,
  "userId": user.uid,
  "product_id": "productId",
  "product_name": "product_name",
  "product_url": "product_url",
  "product_color": "product_color",
  "product_size": "product_size",
  "product_count": "product_count",
  "product_price": "product_price"
});
或者,如果您确实希望在此处使用$firebaseArray:

var ref = new Firebase(FURL);
var userBasket = $firebaseArray(ref.child("items").child(user.uid));
userBasket.$add({
  "email": user.password.email,
  "userId": user.uid,
  "product_id": "productId",
  "product_name": "product_name",
  "product_url": "product_url",
  "product_color": "product_color",
  "product_size": "product_size",
  "product_count": "product_count",
  "product_price": "product_price"
});

我通过下面的代码添加到项目中<代码>$scope.items.$add({“email”:user.password.email,“userId”:user.uid,“product\u id”:“productId”,“product\u name”:“product\u name”,“product\u url”:“product\u url”,“product\u color”,“product\u size”:“product\u size”,“product\u count”:“product\u count”,“product\u price”:“product_price”};那么如何使用您的逻辑设置此代码的格式
ref.child(“items”).child(userId).push(yourtitemisthere)
我如何在YourItem中定义信息在这里?我不知道如何使用push函数。@arslan我用完整的代码示例更新了答案,请看一看。@arslan您是否尝试了添加部分的完整代码,它对您有用吗?很抱歉,回复太晚。是的,我刚刚尝试过,它工作得很好。正如您所说,它将项目放在相关uid下。a我还可以为当前用户提取项目。非常感谢您的帮助。@arslan太好了!既然它现在可以工作了,您能接受答案吗?