如何创建一个唯一的 URL 到 Firebase 路径以使用 AngularFire 进行共享?
How can I create a unique URL to Firebase path for sharing using AngularFire?
所以我已经安静地研究了一段时间,但我似乎无法在任何地方找到正确的答案。我有一个想法,我希望用户创建一个项目列表,然后保存它,return 一个 link 并分享这个 link。我已经知道如何在 firebase 中 return key()
,所以这应该不是问题。
我的 firebase 数据看起来像这样
----Unique id
---item:"item1"
---item:"item2"
----Unique id
---item:"item1"
---item:"item2"
我怎样才能得到它,以便当人们点击保存按钮时,他们会返回一个像这样的 URL 来分享:http://www.example.org/-uniqueID
。当其他人转到 link 时,他们会从 link.
获得正确的共享数据
很抱歉,我没有任何代码给你。我了解 firebase (AngularFire) 基础知识,但这对我来说是新手,我很难理解如何做到这一点。
有人能指出我正确的方向吗?
这意味着 lot.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'
})
});
我不确定你的架构是什么样的,但你可以做的是让用户创建一个列表,然后让用户在输入字段中设置一个唯一的 ID 或 (slug) - 将特定数据保存在Firebase.
然后在您的 APP.JS - 根据该唯一 ID
定义路由
例如
.state('live', {
url: '/live/:uniqueID',
templateUrl: 'views/live.html',
controller: 'liveCtrl'
})
仅供参考:最好的方法是在上面设置 'resolve',以便在控制器激活之前加载数据。
然后在您的控制器中,如果您使用的是 ui-路由器,请获取 $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
})
然后您可以给用户一个 URL 来分享 : http://example.com/live/myuniqueid
如果您仍然感到困惑,请告诉我!
当您调用 $add 时,firebase returns 承诺带有键名,这将允许您在 url 中使用该唯一 ID。 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
});
所以我已经安静地研究了一段时间,但我似乎无法在任何地方找到正确的答案。我有一个想法,我希望用户创建一个项目列表,然后保存它,return 一个 link 并分享这个 link。我已经知道如何在 firebase 中 return key()
,所以这应该不是问题。
我的 firebase 数据看起来像这样
----Unique id
---item:"item1"
---item:"item2"
----Unique id
---item:"item1"
---item:"item2"
我怎样才能得到它,以便当人们点击保存按钮时,他们会返回一个像这样的 URL 来分享:http://www.example.org/-uniqueID
。当其他人转到 link 时,他们会从 link.
很抱歉,我没有任何代码给你。我了解 firebase (AngularFire) 基础知识,但这对我来说是新手,我很难理解如何做到这一点。
有人能指出我正确的方向吗? 这意味着 lot.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'
})
});
我不确定你的架构是什么样的,但你可以做的是让用户创建一个列表,然后让用户在输入字段中设置一个唯一的 ID 或 (slug) - 将特定数据保存在Firebase.
然后在您的 APP.JS - 根据该唯一 ID
定义路由例如
.state('live', {
url: '/live/:uniqueID',
templateUrl: 'views/live.html',
controller: 'liveCtrl'
})
仅供参考:最好的方法是在上面设置 'resolve',以便在控制器激活之前加载数据。
然后在您的控制器中,如果您使用的是 ui-路由器,请获取 $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
})
然后您可以给用户一个 URL 来分享 : http://example.com/live/myuniqueid
如果您仍然感到困惑,请告诉我!
当您调用 $add 时,firebase returns 承诺带有键名,这将允许您在 url 中使用该唯一 ID。 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
});