将 Firebase 记录密钥传递给 URL

Pass Firebase Record Key into URL

我正在向 page1 上的 Firebase 数组添加一个项目,这是在用户单击 "Complete" 按钮时完成的。但是,我还想使用在其中检索记录的 ng-route 加载下一页。我想要用户可以再次访问的唯一 URLs,这就是我将其直接附加到 URL 的原因。

我目前使用的方法是在第一个函数中添加记录,然后检索当时使用适当的 url 绑定到范围的键(参见片段 #2)。在 ng-click 中列出的第二个函数中,我让它使用 url 中的附加密钥执行路由。

使用此设置,它会添加记录,但不会将我带到正确的页面,它默认为主页。我想知道是不是因为它没有解决我的 $add 中的承诺,因此无法将它附加到 url 之前 运行 范围中的第二个函数。

非常感谢任何帮助,如果您需要我的更多代码,请告诉我!

//Snippet from page1.html (Within appCtrl and form scope)
<button ng-click="form.storeCheck(); appCtrl.pageLoad(form.urlKey)" ng-disabled="checkVerifyForm.$invalid" class="btn btn-lg btn-success pull-right">Complete</button>

//Snippet from Page1Controller (form.storeCheck)
this.checkList.$add(this.check).then(function(ref){
  this.urlKey = 'spec/:'+ref.key();

//Snippet from AppController (appCtrl.pageLoad)
this.pageLoad = function(page){
  $location.path('/'+page);

//Snippet from config ng-route
.when('/spec/:urlKey', {
  templateUrl: 'views/spec.html',
  controller: 'SpecController',
  controllerAs: 'spec'
})
ng-click="form.storeCheck(); appCtrl.pageLoad(form.urlKey)"

在此代码中,您在 form.storeCheck() 之后直接说 运行 appCtrl.pageLoad() 如果这是一个不涉及任何数据但实际上是离线应用程序,那会很好, appCtrl.pageLoad 只应在 storeCheck 已解决时调用,这不是您在此处暗示的内容。

有多种方法可以解决这个问题,也许最简单的方法是在一个控制器中完成所有这些工作

在您的 Page1Controller 中,将 $location 添加为依赖项

this.checkList.$add(this.check).then(function(ref){
  $location.path('/spec/:'+ref.key());
}

将您的 html 更改为

<button ng-click="form.storeCheck();"