我有以下组件模板:
<div *ngFor="let ctrl of data; trackBy:ctrl?.Id">
<div *ngIf="getNext(ctrl.nextDate) | async as next">
<span>{{next | date: 'dd.MM.yyyy'}}</span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
getNext() 是一个简单的方法,返回一个Observable<Date>:
public getNext(deadline: string): Observable<Date> {
return this.http.get<Date>(`${this.config.apiEndpoint}/api/meeting?deadline=${deadline}`);
}
Run Code Online (Sandbox Code Playgroud)
我的目标是调用该方法并使用模板中的异步管道订阅 observable。但是,当我运行应用程序时,会生成无休止的 GET 和 OPTIONS 请求。
此外,如果我将方法调用放在 ngFor 之外,也会发生同样的情况。该调用需要在 ngFor 内部执行,因为每个集合项的参数都不同。
为什么该方法只调用一次而订阅后不再生成更多调用?
我怎样才能只观看 Angular ReactiveForm 的 2 个字段?我有一个如下所示的表格:
this.filter = this.fb.group({
text: ['', []],
bankCountry: ['', []],
bankCity: ['', []]
});
Run Code Online (Sandbox Code Playgroud)
我如何监视与最后 2 个字段相关的更改?
使用angulafire它可以在将记录pushid保存到数据库之前检索它:
myModelDto.key = dbRef.push().key;
// Add the myModelDto to the relative colletion
Run Code Online (Sandbox Code Playgroud)
这很方便,因为我可以将firebase密钥存储为我的模型的属性.
现在,angularfire2这似乎不可能以干净/简单的方式:
constructor(private angFire: AngularFire) {
this.placeRef$ = angFire.database.list('/places');
}
insertPlace = (place: IPlace): firebase.Thenable<IPlace> => {
return this.placeRef$.push(place)
.then(item => {
place.id = item.key;
this.placeRef$.update(item.key, place)
});
Run Code Online (Sandbox Code Playgroud)
因此,我想知道我是否以错误的方式接近firebase(为了方便起见,希望将一个关键属性绑定到我的模型上),或者是否有更好的方法将pushid添加到新添加的记录中.
在 Firestore 中,我有一个具有数组类型属性(名为“items”)的文档。该数组包含ShoppingItem具有以下结构的对象:
export class ShoppingItem {
id?: string;
name: string;
checked = false;
}
Run Code Online (Sandbox Code Playgroud)
为了完成起见,在文档结构下方:
export interface ShoppingList {
id: string;
name?: string;
items: ShoppingItem[]; // <-- This is the array property I am updating
}
Run Code Online (Sandbox Code Playgroud)
从用户界面,用户可以更新checked对象的属性,我想相应地更新数据库。我从 Firebase 文档中读到,我们可以使用它arrayRemove/arrayUnion以原子方式删除/添加数组项。
为了更新现有项目,我是否必须删除旧对象并每次添加新对象(嵌套承诺),如下所示?或者有可能以更优雅的方式?
updateItem(listId: string, item: ShoppingItem) {
const docRef = this.db.collection("list").doc(listId)
return docref.update({ items: firestore.FieldValue.arrayRemove(item) })
.then(() => {
{
docRef.update({ items: firestore.FieldValue.arrayUnion(item) });
}
});
}
Run Code Online (Sandbox Code Playgroud)
在数组中删除和添加项目的另一个缺点是更新的元素在 UI 中闪烁。
我需要对Date字段进行排序的三个不同的对象数组,其中每个组中的字段名称不同。
下面是我的数据示例:
const documents = [
{
documentId: 'ADB0125A',
fileName: 'test_2018.pdf',
date': '2017-12-02T19:08:52+01:00' // Field to sort by
},
{
documentId: '123456',
fileName: 'test2_2018.pdf',
date': '2017-12-12T22:08:52+01:00' // Field to sort by
},
{
documentId: '121212',
fileName: 'test3_2018.pdf',
date': '2018-05-22T23:08:52+01:00' // Field to sort by
}];
const conversations = [
{
conversationId: '1102',
lastUpdate: '2015-10-10T18:19:12+01:00' // Field to sort by
},
{
conversationId: '5622',
lastUpdate: '2019-08-16T18:19:12+01:00' // Field to sort by
},
{
conversationId: '112',
lastUpdate: '2015-10-26T18:19:12+01:00' // Field …Run Code Online (Sandbox Code Playgroud) 我的问题是,用户是否可以在无需重新安装 PWA 应用程序的情况下获取这些更改?
我在生产中部署了一个 PWA 应用程序。客户端已在其移动设备中安装了已部署的 PWA 应用程序,我想在 HTTP 服务器中的 PWA 应用程序中部署另一个更新补丁。
我使用 ReactJS 构建了一个渐进式 Web 应用程序,但遇到了问题。我正在使用mockApi 来获取数据。离线时,我的应用程序无法运行,因为服务工作线程仅缓存静态资产。
如何将来自mockApi 的HTTP GET 调用保存到缓存存储中?
我已将 PWA 功能和 service worker 添加到我的 angular 网站。发布到实时服务器后,许多用户开始遇到问题,例如:“无法访问此站点”,但是当用户单击 CTRL+ F5 时,它可以正常工作。
为了立即解决,我已经从我的版本中删除了 PWA 和 service worker。尽管如此,许多用户都面临着同样的问题或来自 Service Worker 的“未找到索引页面”错误。
如何从最终用户的浏览器中删除或取消注册旧的 Service Worker?
我尝试使用此代码删除服务工作者缓存:
if ('caches' in window) {
caches.keys()
.then(function(keyList) {
return Promise.all(keyList.map(function(key) {
return caches.delete(key);
}));
})
}
Run Code Online (Sandbox Code Playgroud)
为了删除服务工作者,我添加了以下内容:
if(window.navigator && navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations()
.then(function(registrations) {
for(let registration of registrations) {
registration.unregister();
}
});
}
Run Code Online (Sandbox Code Playgroud) 我将 NX 工作区更新到最新版本 ( "@nrwl/angular": "11.5.2"),将其与 monorepo 中的 Angular 应用程序 (v 11.2.6) 结合使用。
我想使用以下命令生成一个新的 Angular 库:
ng generate @nrwl/angular:library --name=service --style=scss --directory=/libs/booking
Run Code Online (Sandbox Code Playgroud)
但我在控制台中收到以下错误:
SchematicsException [Error]: Project name "-libs-booking-service" is not valid.
New project names must start with a letter, and must contain only alphanumeric
characters or dashes. When adding a dash the segment after the dash must also
start with a letter.
Run Code Online (Sandbox Code Playgroud)
该命令以某种方式在项目名称之前添加了一个破折号-,从而生成错误。
我还清除了node_modules并再次重新安装了软件包,但没有任何运气。
更新
在 Shashank 的提示后,我在下面留下了帮助我解决问题的步骤:
如果我删除目录参数中的前导/,则会收到以下错误:
ng generate @nrwl/angular:library --name=services …Run Code Online (Sandbox Code Playgroud) 在Windows机器上(win 7或Win server 2008 R2),我有一个批处理脚本,可以将一些.config文件复制到备份文件夹中.
我想编写另一个脚本来删除一周前创建的备份文件.
有很多关于如何使用的建议FORFILES(例如):
FORFILES /P "D:\Configs_Backup" /M *.config /D -7 /C "cmd /c del @file"
Run Code Online (Sandbox Code Playgroud)
但是这个命令使用"修改"的时间戳,而我需要使用创建日期.
无需安装任何第三方程序,是否可以通过命令控制台实现此目的?
angular ×6
javascript ×3
angularfire2 ×2
typescript ×2
angular-cli ×1
arrays ×1
batch-file ×1
firebase ×1
nrwl-nx ×1
observable ×1
polymer-3.x ×1
reactjs ×1
rxjs ×1
rxjs5 ×1
windows ×1