javascript - Angularjs - Firebase 显示当前登录的用户数据

标签 javascript angularjs ionic-framework firebase

我正在尝试通过 ionic 构建一个移动购物应用程序。我想显示用户添加到购物车的商品。但在网上搜索并没有找到任何方法。 有人可以帮忙吗?

app.js

.constant('FURL', 'https://ecommayakkabi.firebaseio.com/')

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?
    } 
});

服务.js

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

app.js

.state('tab.cart', {
    url: '/cart',
    cache: false,
    views: {
        'tab-cart': {
            templateUrl: 'templates/tab-cart.html',
            controller: 'CartCtrl'
        }
    }
});

firebase view

最佳答案

由于 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(其可选部分)的用户访问 items/:userId 路径,但如果没有该 ID,您的应用程序将不安全。

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"
});

关于javascript - Angularjs - Firebase 显示当前登录的用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36766344/

相关文章:

angularjs - 使用 Ionic 框架清除历史记录并在登录/注销时重新加载页面

javascript - cordova 插件的元数据值未更新

javascript - 在 Javascript 中创建预定义对象的实例

javascript - 从两个字符之间的字符串中提取信息

javascript - 如何在 AngularJS 指令中重新渲染模板?

javascript - AngularJS获取当前templateUrl(html页面)

jquery - 如何在不使用 jQuery 的情况下获取元素的 offset().top 值?

javascript - 在哪里可以找到 beta Office.js 的 typescript 引用?

javascript - JSON循环引用 Angular 错误

javascript - 如何正确应用Angularjs ng-repeat?