我正在尝试使用新的 AngularFire API (>v7) 在集成测试中连接到 firebase 模拟器
import {
TestBed
} from '@angular/core/testing';
import {
initializeApp,
provideFirebaseApp
} from '@angular/fire/app';
import {
doc,
enableIndexedDbPersistence,
Firestore,
getFirestore,
provideFirestore,
setDoc
} from '@angular/fire/firestore';
import {
connectFirestoreEmulator
} from "firebase/firestore";
describe('FirestoreEmulatorSmoketest', () => {
let projectId: string;
let firestore: Firestore;
beforeAll(() => {
const testConfig = {
projectId,
auth: ...
};
TestBed.configureTestingModule({
imports: [
provideFirebaseApp(() => initializeApp(testConfig)),
provideFirestore(() => {
const firestore = getFirestore();
connectFirestoreEmulator(firestore, 'localhost', 8080);
enableIndexedDbPersistence(firestore);
return firestore;
}),
],
}) …Run Code Online (Sandbox Code Playgroud)我已经设法让 @angular/fire 在 Angular 独立应用程序中工作,但我正在尝试像过去一样打开离线功能,现在我看到它已enableIndexedDbPersistence被标记为已弃用。它建议如下:
该功能将在未来的主要版本中删除。相反,将 FirestoreSettings.cache 设置为 IndexedDbLocalCache 的实例以打开 IndexedDb 缓存。当 FirestoreSettings.cache 已指定时调用此函数将引发异常。
我已经阅读了通常可以很好地解释如何使用 @angular/fire 的文档(https://firebase.google.com/docs/firestore/manage-data/enable-offline),但我没有看到关于做什么的任何明显指示。文档显示了如何使用传递到调用中的选项参数initializeFirestore,但 Angular 应用程序似乎没有在外部使用此方法(从开发人员的角度来看)。
我目前拥有的是以下内容:
export const appConfig: ApplicationConfig = {
providers: [
provideRouter(routes),
provideAnimations(),
provideServiceWorker('ngsw-worker.js', {
enabled: !isDevMode(),
registrationStrategy: 'registerWhenStable:30000',
}),
importProvidersFrom(
provideFirebaseApp(() =>
initializeApp({
// ... my info
})
),
provideAuth(() => getAuth()),
provideFirestore(() => {
const firestore = getFirestore();
enableIndexedDbPersistence(firestore); // Marked as deprecated :(
return firestore;
}),
provideStorage(() => getStorage())
),
],
};
Run Code Online (Sandbox Code Playgroud) 如何在angularjs app中路由更改之前等待身份验证完成.
我正在使用angularfire简单身份验证.
您可以使用example@gmail.com和示例作为凭证来测试plunker .
我知道问题的原因.但不知道如何解决它...
实际上,当经过身份验证的用户转到' #/ home /,在sahayiApp.run(function(){...})函数中时,会检查条件是否(next.authRequired &&!$ rootScope.user){...}.实际上,经过身份验证的用户可以通过此检查,但此代码在实际身份验证发生之前运行.那么在路由更改之前是否有任何方法进行身份验证...
我想在firebase ref上使用update()来在一次操作中更新许多子节点.为此,我传递了带有值的对象进行更改.
这是console.log的输出(angular.toJson(change,1))
{
"10": {
"otherRubies": 30
},
"11": {
"otherRubies": 30
}
}
Run Code Online (Sandbox Code Playgroud)
一开始我有:
然后我做:
var refUsers = new Firebase(FBURL).child('users/');
refUsers.update(change);
Run Code Online (Sandbox Code Playgroud)
所以我希望:

但不是我得到:

有没有办法做到这一点?
我有以下使用AngularFire的控制器
app.controller("authController", function($scope, $firebaseSimpleLogin){
var ref = new Firebase("https://myapp.firebaseIO.com/");
$scope.auth = $firebaseSimpleLogin(ref, function(error, user){
if(error){
console.log(error);
}
else if(user){
console.log(user);
}
else{
console.log("user logged out");
}
});
// This shows a valid object
console.log($scope.auth);
$scope.createAccount = function(){
console.log("found me");
$scope.auth.$createUser($scope.email, $scope.password, function(error, user){
console.log("something");
console.log(user);
if(!error){
console.log(user);
}
else{
console.log(error);
}
});
};
});
Run Code Online (Sandbox Code Playgroud)
当我将$scope.createAccount函数绑定到一个ng-click事件并单击绑定按钮时,console.log("found me")在浏览器中运行,但是没有显示其他任何console.log命令$scope.createAccount.
console.log($scope.auth)设置$scope.createAccount函数之前的命令显示了一个$createUser定义了函数的有效对象.
我跑的时候没有收到任何控制台错误$scope.createAccount所以我假设电话已经"成功"完成.
为什么我能够看到auth对象,但在调用后没有收到回调$createUser?
我是第一次在Firebase中开发一个应用程序,并且很好奇我应该如何在两个对象a user和a 之间建模数据post.我来自更多的关系数据库背景,不仅好奇这是如何在非关系数据库中完成的,而且特别是如何在Firebase中设置两个对象之间的关系.
例如,我的应用程序有很多用户,每个用户创建许多帖子.
User {
firstName: String,
lastname: String,
userName: String
}
Post {
title: String,
content: String,
date: Date,
writtenBy: [User object?]
}
Run Code Online (Sandbox Code Playgroud)
我应该如何在Firebase中构建这两个对象,以便帖子属于用户,但是无论用户如何都可以查询所有帖子,并且可以在不中断其他对象的数据和/或关系的情况下编辑用户和帖子对象?
我应该如何通过firebase创建新的"关系"对象:
sync.$set({userA: {
firstname: "Billy",
lastName: "Bob",
userName: "BillyBob",
Posts: {
// .....
}
}
});
Run Code Online (Sandbox Code Playgroud)
谢谢!
我试图找出如何的结果保存serviceId到一个services叫上一个父对象provider1,当services对象是尚未建立.
我的Firebase数据如下所示:
"providers" : {
"provider1" : {
"name" : "The Whittington Hospital",
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何保存结果serviceId:
for (var providerKey in service.providers) {
var providerId = providers.$getRecord(providerKey);
providerId.services[serviceId] = true;
providers.$save(providerId);
}
Run Code Online (Sandbox Code Playgroud)
但我无法设置[serviceId]为true,因为services对象尚不存在,它是未定义的.
Firebase不允许你创建空对象,否则我的下面会有一个空的services: {}obj provider1.
我怎样才能解决这个问题.任何帮助表示赞赏.提前致谢!
有没有办法让所有用户都计入firebase?(通过密码,脸书,推特等进行身份验证)所有社交和电子邮件及密码验证用户的总数.
javascript angularjs firebase angularfire firebase-authentication
angularfire.$ save()与firebase .push()相比如何?我知道push()将在存储数据时生成唯一键,但我无法使用angularfire重新创建行为.有没有办法或者我应该使用.push()如果是这样,在什么情况下你会使用$ save()?
这是我使用$ save()的一个示例...
var fb = new Firebase(FIREBASE_URI).child('Test');
var article = $firebaseObject(fb);
article.Foo = "bar";
article.$save().then(function(fb) {
console.log(fb.key() === article.$id); // true
}, function(error) {
console.log("Error:", error);
});
Run Code Online (Sandbox Code Playgroud)
另一个使用.push()......
var article = new Firebase(FIREBASE_URI).child('Articles');
article.push({
title: $scope.article.title,
post: $scope.article.post
}, function(error) {
if (error) {
console.log("Error:", error);
}
});
Run Code Online (Sandbox Code Playgroud)
两者的优点/缺点和用例是什么?
我已经阅读了有关此问题的所有问题,但我仍然没有找到答案.所以不要将其标记为重复.
我正在使用AngularFire和Angular 2以及Typescript.我正在使用FirebaseListObservable从端点中提取24条最新记录的列表.这是我的代码:
import { Component } from '@angular/core';
import { AngularFire, FirebaseListObservable } from 'angularfire2';
@Component({
selector: 'story-list',
templateUrl: './story-list.component.html',
styleUrls: ['./story-list.component.scss']
})
export class StoryListComponent {
stories: FirebaseListObservable<any[]>;
constructor(af: AngularFire) {
this.stories = af.database.list('/stories', {
query: {
limitToLast: 24
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这将按预期返回24个最新故事的列表,但是当我在页面上呈现它们时:
<p *ngFor="let story of stories | async">{{ story.title }}</p>
Run Code Online (Sandbox Code Playgroud)
它显示了最古老的故事,最新的故事在底部.我明白为什么会这样,而且我并没有声称这是一个问题,但我该如何扭转呢?我希望能够在查询中反转这一点,但如果这不可能,我会开放以某种方式在渲染中反转它.
无论您的答案是什么,请不要只链接到文档.没有AngularFire的文档可以完全解释这一点.我读过每一个字.请提供真实的工作代码.
但是,我绝对不会接受的一个解决方案是在创建时在记录中存储负数日期,然后根据该日期进行排序.这是我听过的最糟糕的解决方案,真正的数据库系统允许您在查询中执行此操作.所以请不要建议.
如果您有任何想法,我将不胜感激.我不想再使用其他产品,因为我喜欢Firebase.
javascript angularjs firebase angularfire firebase-realtime-database
angularfire ×10
firebase ×9
angularjs ×7
javascript ×4
angular ×1
angularfire2 ×1
json ×1
nosql ×1