所以我一直在研究这个问题,但我似乎无法在任何地方找到正确的答案。我有一个想法,我希望用户创建一个项目列表,然后保存,返回一个链接并分享此链接。我已经知道如何在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'
})
});
答案 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
});