如何使用AngularFire为Firebase路径创建唯一的URL以进行共享?

时间:2015-05-17 22:42:17

标签: angularjs firebase angularfire unique-key

所以我一直在研究这个问题,但我似乎无法在任何地方找到正确的答案。我有一个想法,我希望用户创建一个项目列表,然后保存,返回一个链接并分享此链接。我已经知道如何在firebase中返回key(),这不应该是一个问题。

我的firebase数据看起来像这样

----Unique id

       ---item:"item1"
       ---item:"item2" 

----Unique id

       ---item:"item1"
       ---item:"item2" 

如何获取它,以便当用户点击保存按钮时,他们会返回这样的网址来分享:http://www.example.org/-uniqueID。当其他人访问该链接时,他们会从该链接获得正确的共享数据。

对不起,我没有为您提供任何代码。我理解firebase(AngularFire)的基础知识,但这对我来说是新的,我无法理解如何做到这一点。

有人能指出我正确的方向吗? 这意味着很多.TIA

修改

这有效:

angular.module("app", ["firebase", "ui.router"])

.controller('liveCtrl', function($scope, $stateParams, $firebaseObject) {
    console.log($stateParams);

   var fb = new Firebase('https://xxxx.firebaseio.com/' + $stateParams.uniqueID + '');
    console.log(fb);

   $scope.list = $firebaseObject(fb);
   $scope.list.$loaded().then(console.log($scope.list));


})

.config(function($stateProvider, $urlRouterProvider) {

  $urlRouterProvider.otherwise("home");

  $stateProvider

  .state('live', {
        url: '/live/:uniqueID',
        templateUrl: 'live.html',
        controller: 'liveCtrl'
    })
});

2 个答案:

答案 0 :(得分:2)

我不确定您的架构是什么样的,但您可以做的是让用户创建一个列表,然后让用户在输入字段中设置一个唯一的ID或(slug) - 将该特定数据保存在Firebase中。

然后在 APP.JS 中 - 根据该唯一ID定义路线

例如

.state('live', {
        url: '/live/:uniqueID',
        templateUrl: 'views/live.html',
        controller: 'liveCtrl'
    })

仅供参考:最好的办法是“解决问题”。因此,数据在控制器激活之前加载。

然后在您的控制器中,如果您使用的是ui-router,请获取$ stateParam,并将其设置在您的firebase URL中。

.controller('liveCtrl', function($scope, $stateParams) {

    var fb = new Firebase('https://firebaseio.com/data/' + $stateParams.param + '');

    // Return the data | Set it in a $scope

})

然后,您可以为用户提供分享的网址:http://example.com/live/myuniqueid

让我知道你是否仍然困惑!

答案 1 :(得分:1)

当你调用$ add时,firebase会返回一个带有密钥名称的promise,这样你就可以在你的url中使用那个uniqueid。 uniqueid将与key()

相同 来自angularfire文档的

var list = $firebaseArray(ref);
list.$add({ foo: "bar" }).then(function(ref) {
var id = ref.key();
console.log("added record with id " + id);
list.$indexFor(id); // returns location in the array
});