【问题标题】:Angular method returns as undefined rather than JSON objectAngular 方法返回未定义而不是 JSON 对象
【发布时间】:2016-11-08 09:13:29
【问题描述】:

我在身份验证提供程序中有一个 getUser 方法(在 Ionic 2 中工作):

  getUser(uid: string): any {
    var toReturn;

        firebase.database().ref('/userProfile').orderByKey().equalTo(uid).once("value", function(snapshot){
          toReturn = snapshot.val();
          console.log("getUser = " + JSON.stringify(toReturn));
        });

        return toReturn;
      }

它从 firebase 检索用户对象。 如果它存在并保存在 toReturn 变量中,它会通过 console.log 正确输出。

下面是 ItemDetailPage 类,但是当我记录相同方法的值时,它返回 undefined。

import { Component } from '@angular/core';
import { NavParams} from 'ionic-angular';
import { Auth } from '../../providers/auth/auth';

@Component({
  templateUrl: 'build/pages/item-detail/item-detail.html',
  providers: [Auth]
})
export class ItemDetailPage {
  private title;
  private description;
  private author;

  constructor(private navParams: NavParams, private _auth: Auth) {
    this.title = this.navParams.get('item').title;
    this.description = this.navParams.get('item').description;
    this.author = _auth.getUser(this.navParams.get('item').author);
    console.log("item-detail.ts = " + JSON.stringify(this.author));
    //_auth.getUser('123');
  }

}

我是 Angular 的新手,并且在不断尝试学习,所以这可能是我错过的一些非常简单的事情。但是,为什么 JSON 对象没有被返回/传回?我需要它来利用从数据库中查询的值。

谢谢

【问题讨论】:

  • 你应该使用 lambda 语法 (snapshot) => {} 而不是 function(snapshot) {}。看看它是否有效。

标签: angularjs ionic-framework firebase firebase-realtime-database ionic2


【解决方案1】:

您缺少的是 Firebase 方法正在错误地运行。因此,它确实返回了一个承诺而不是一个值。这就是您将返回值作为回调获取的原因。

你应该做的是:在你的服务中返回 firebase 承诺(或者一个新的承诺,以防你想在将数据返回给控制器之前对数据做一些事情)。然后你想在控制器中创建一个回调函数。

return firebase.database().ref('/userProfile').orderByKey().equalTo(uid).once("value", function(snapshot){});

// Controller

_auth.getUser(this.navParams.get('item')).then(function(snapshot){
    ...
});

你应该看看 Promise 在纯 javascript 中是如何工作的:

http://andyshora.com/promises-angularjs-explained-as-cartoon.html

然后它们是如何在 NG2 样式中使用的

http://coenraets.org/blog/2016/02/angular2-ionic2-data-services-promises-observables/

【讨论】:

  • 完成了工作。感谢您的链接,将给他们一个阅读!
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多