【问题标题】:Dynamic load page with AngularFire and Angular2使用 AngularFire 和 Angular2 的动态加载页面
【发布时间】:2016-11-16 07:00:29
【问题描述】:

我正在学习 Angular2 并将应用程序转换为 Angular2。现在我正在尝试创建从 Firebase 加载内容的动态页面。但我被卡住了。如果我理解正确,我需要在构造函数中加载 AngularFire,并在 ngOnInit() 中加载 routeparms。由于先调用了构造函数,所以不能使用路由器Param调用AngularFire。

这是我现在的代码:

export class StaticContentComponent {
    pagename;
    isHome;

    ngOnInit(): void {
        this.route.params.forEach((params: Params) => {
            this.pagename = params['pageName'];
            this.isHome = (this.pagename == 'home');
        });
    }

    pagecontent: FirebaseObjectObservable<any[]>;
    constructor(af: AngularFire, private route: ActivatedRoute) {
        this.pagecontent = af.database.object('/pages/content/' +  this.pagename);
    }
}

我尝试切换它们,使用其他初始化,但日志中出现大红线错误。

另外,我应该使用只有 AngularFire 的服务吗?我不确定,AngularFire 示例不使用它们。

谢谢。

【问题讨论】:

    标签: angular firebase firebase-realtime-database angularfire


    【解决方案1】:

    您可以简单地嵌套调用。

    constructor(private af: AngularFire, private route: ActivatedRoute) { }
    
    ngOnInit(): void {
        this.route.params.forEach((params: Params) => {
            this.pagename = params['pageName'];
            this.isHome = (this.pagename == 'home');
    
            this.pagecontent = af.database.object('/pages/content/' +  this.pagename);
        });
    }
    

    执行以下操作:

    1. subscribe 路由参数
    2. 解析后,从 Firebase 检索对象

    编辑:

    对于你的第二个问题,AngularFire 本身已经是一项服务,所以如果 AF 的功能对你来说已经足够了,你不必将它包装在另一个服务中。

    例如,我喜欢将 AF 包装在另一个服务中并添加控制台调试消息。

    【讨论】:

    • 感谢答案。如果我尝试添加 af 的代码,我得到“af not find”:AngularFire;无法读取参数(无法读取未定义的属性“参数”)无法读取未定义的属性“参数”
    • 我已经更新了我的答案。您忘记在af: AngularFire 之前添加private 关键字
    猜你喜欢
    • 2016-11-03
    • 2018-02-28
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多