删除对象和存储 Angular Firebase

Posted

技术标签:

【中文标题】删除对象和存储 Angular Firebase【英文标题】:Remove Object and Storage Angular Firebase 【发布时间】:2019-05-05 04:49:17 【问题描述】:

我正在做我的第一个 Angular 和 Firebase 项目,我快完成了。

我有一个关于使用两者删除对象的问题。我有一个将删除对象的服务。该对象内部有另一个名为“图片”的对象,它有两个属性,key: stringurl: string

我想确保在删除该对象时也从存储中删除该文件,我发现这种方法可行,但我认为这不是正确的方法,特别是因为我收到 TS 错误:

“错误 TS2339:类型‘’上不存在属性‘图片’。”

谁能帮我解决这个问题?这是我的删除方法

deleteEvent(id: string) 
        const obj = this.db.object(this.NODE + id);
        const getPic = obj.snapshotChanges().subscribe(
            (a) => 
                console.log(a.payload.val());
                this.storage.ref(this.NODE + a.payload.val().picture.key).delete();
            
        );
        return obj.remove();
    

【问题讨论】:

【参考方案1】:

我想说你已经掌握了它的要点。如果唯一困扰您的是 Linting 错误,您可以使用括号表示法而不是点表示法:this.NODE + a.payload.val()['picture']['key']... 我可能会在其中引入一些错误处理以防万一。

一方面,为了一点点改进,我建议不要使用订阅来一次性从数据库中获取数据。 AngularFire2 有一种方法可以减少设置可观察/订阅的开销,但无论如何它都将被删除。如果我这样做,我会这样写:

deleteEvent(id: string)

    return this.db.database.ref(this.NODE + id).once('value').then( data => 
        console.log(data.val());
        return this.storage.ref(this.NODE + a.payload.val()['picture']['key']).delete().then( () => 
            console.log('Success!');
            return this.db.database.ref(this.NODE + id).remove();
        ).catch( err => 
            console.log(`Error deleting $this.NODE + a.payload.val()['picture']['key'] from storage:`);
            console.log(err);
        );
    ).catch( err => 
        console.log(`Error obtaining /$this.NODE + id from the database:`);
        console.log(err);
    );

*未经测试的代码

我是 Promise 的忠实拥护者(好像你说不出来),AngularFire2 经常使用它们 - 使处理错误变得更加容易。

【讨论】:

嘿@JeremyW 兄弟,非常感谢!我不知道括号符号。我真的很喜欢你的方法,我也成为了 promises 的粉丝,这是有道理的,对吧?我只需要更好地掌握它。非常感谢您的帮助兄弟!

以上是关于删除对象和存储 Angular Firebase的主要内容,如果未能解决你的问题,请参考以下文章

将 url 留在 Angular 中时从本地存储中删除值

从数组打字稿中删除对象(Angular 2)

返回一个对象 Android

使用Angular语法删除数组中的对象[重复]

Mongoose/Angular/Node:使用 deleteOne 方法的路由一直说对象已删除,但删除计数为零

在前端存储令牌和敏感信息的安全方式(Angular 8)