html - 显示 Firebase 函数的返回值
问题描述
做了更多的阅读,更多的编辑,现在我认为我的主要问题是当我调用我的函数时calculator.component.ts
我的 html 再次看起来像这样(从上次稍微编辑了它):
app.component.html
<div>
<h1 align="center">Calculator App with Firebase</h1>
<app-calculator> </app-calculator>
计算器.component.html
<div>
<label for="numField1"> Number 1:
<input [(ngModel)]="numField1">
</label>
<br><br>
<label for="numField2"> Number 2:
<input [(ngModel)]="numField2">
</label>
<br><br>
<button id = "calculate" (click)="getFirebaseFunction()">Calculate</button>
<br>
<br>
<p>Solution: {{sum | async | json}} </p>
</div>
计算器.component.ts
import { Component, OnInit, Input } from '@angular/core';
import { AngularFireFunctions } from '@angular/fire/functions';
import * as firebase from 'firebase';
@Component({
selector: 'app-calculator',
templateUrl: './calculator.component.html',
styleUrls: ['./calculator.component.css']
})
export class CalculatorComponent implements OnInit {
@Input() firstNumber: Number
@Input() secondNumber: Number
constructor() { }
ngOnInit() {
}
getFirebaseFunction() {
const numField1 = this.firstNumber;
const numField2 = this.secondNumber;
var sum = 0
let addNumbers = firebase.functions().httpsCallable('sum')
addNumbers({data: (numField1, numField2)}).then(function(result) {
this.sum = result.data.result
})
}
}
最后,我的 firebase 函数 index.ts
export const sum = functions.https.onCall((data) => {
const numField1 = data.Number
const numField2 = data.Number
if (!Number.isFinite(numField1) || !Number.isFinite(numField2)) {
throw new functions.https.HttpsError('invalid-argument', 'Both Number Fields are Required for Addition')
}
return {
firstNumber: numField1,
secondNumber: numField2,
operator: '+',
result: numField1 + numField2
}
})
当我运行它时,我面临以下错误:
Error: Both Number Fields are Required for Addition
我的意思是根据我的函数,它没有认识到输入 numField1 和 numField2 没有被传递到函数中,我认为这是因为我在addNumbers({data: (numField1.valueOf, numField2.valueOf)}).then(function(result) {
this.sum = result.data.result
})
<-- 这个语句中有问题,不确定是什么否则我应该把 firebase 提供的文档放在那里,只处理一个名为text
.
解决方案
因此,我在上面接近的东西有一些问题,下面是实现我想要实现的目标的正确方法,我将在下面尽可能地尝试和解释,以防将来有人偶然发现类似的问题.
修改了calculator.component.ts
import { Component, OnInit, Input } from '@angular/core';
import { AngularFireFunctions } from '@angular/fire/functions';
import * as firebase from 'firebase';
@Component({
selector: 'app-calculator',
templateUrl: './calculator.component.html',
styleUrls: ['./calculator.component.css']
})
export class CalculatorComponent implements OnInit {
@Input() firstNumber: Number
@Input() secondNumber: Number
sum = 0
constructor() { }
ngOnInit() {
}
getFirebaseFunction() {
const addNumbers = firebase.functions().httpsCallable('sum');
const numField1 = Number(this.firstNumber);
const numField2 = Number(this.secondNumber);
addNumbers({
firstNumber : numField1,
secondNumber: numField2
}).then((result) => {
this.sum = result.data.result
}
)}
}
修改后的 index.ts
import * as functions from 'firebase-functions';
// // Start writing Firebase Functions
// // https://firebase.google.com/docs/functions/typescript
//
export const sum = functions.https.onCall((data) => {
const firstNumber = data.firstNumber
const secondNumber = data.secondNumber
if (!Number.isFinite(firstNumber) || !Number.isFinite(secondNumber)) {
throw new functions.https.HttpsError('invalid-argument', 'Both Number Fields are Required for Addition')
}
return {
firstNumber: firstNumber,
secondNumber: secondNumber,
operator: '+',
result: Number(firstNumber) + Number(secondNumber)
}
})
对此的主要理解是:
- 在怀疑有问题的行中,我基本上需要将字段的输入与其在函数中的关联属性等同起来,以便在单击计算按钮时,程序会理解我们正在传递
numField1
forfirstNumber
和numField2
forsecondNumber
推荐阅读
- rust - kcov 正在按预期运行,但它永远不会完成
- javascript - 我如何通过 id 关联两个 JSON 文件(一个文件包含一个数组)?
- node.js - 如何在 for 循环中运行我的异步函数
- excel - 10 台计算机中只有一台无法使用宏
- weka - 只有一个排名属性,但选择了两个?Weka 中的 InfoGain Ranker
- excel - 作为循环的一部分偏移复制行
- python - 用于删除跨列具有相同内容的连续重复行的数据框
- vba - 发送电子邮件并回复全部给它
- c - 同名指针和正则变量
- python - 来自文件 csv 的错误 insert_one 文档 pymongo