小编Fra*_*sco的帖子

ngFor 块内模板中的异步管道触发 http GET 调用循环

我有以下组件模板:

<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 内部执行,因为每个集合项的参数都不同。

为什么该方法只调用一次而订阅后不再生成更多调用?

observable typescript rxjs5 angular

6
推荐指数
1
解决办法
3704
查看次数

反应式表单值更改如何仅观看 2 个字段[Angular2]

我怎样才能只观看 Angular ReactiveForm 的 2 个字段?我有一个如下所示的表格:

this.filter = this.fb.group({
            text: ['', []],
            bankCountry: ['', []],
            bankCity: ['', []]
        });
Run Code Online (Sandbox Code Playgroud)

我如何监视与最后 2 个字段相关的更改?

rxjs angular

5
推荐指数
1
解决办法
4935
查看次数

angularfire2在保存模型对象之前获取新的pushid

使用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添加到新添加的记录中.

firebase angularfire2 angular

5
推荐指数
1
解决办法
349
查看次数

Firebase 更新嵌套数组内的对象

在 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 中闪烁

javascript angularfire2 angular google-cloud-firestore

5
推荐指数
1
解决办法
1068
查看次数

按属性对三个不同的对象数组进行排序

我需要对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)

javascript arrays typescript

5
推荐指数
0
解决办法
76
查看次数

如何在已安装的 PWA 应用程序上推送应用程序更新?

我的问题是,用户是否可以在无需重新安装 PWA 应用程序的情况下获取这些更改?

我在生产中部署了一个 PWA 应用程序。客户端已在其移动设备中安装了已部署的 PWA 应用程序,我想在 HTTP 服务器中的 PWA 应用程序中部署另一个更新补丁。

javascript progressive-web-apps polymer-3.x

5
推荐指数
1
解决办法
6678
查看次数

如何在 React PWA 中将 API 中的数据缓存到缓存存储?

我使用 ReactJS 构建了一个渐进式 Web 应用程序,但遇到了问题。我正在使用mockApi 来获取数据。离线时,我的应用程序无法运行,因为服务工作线程仅缓存静态资产。

如何将来自mockApi 的HTTP GET 调用保存到缓存存储中?

reactjs service-worker progressive-web-apps

5
推荐指数
1
解决办法
4485
查看次数

在 angular 6 网站中删除 PWA 后,如何从客户端浏览器中删除 PWA Service Worker 及其缓存

我已将 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)

service-worker progressive-web-apps angular

5
推荐指数
1
解决办法
8879
查看次数

使用 NX 命令创建角度库时出现 SchematicsException

我将 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)

angular-cli angular nrwl-nx

5
推荐指数
1
解决办法
1911
查看次数

用于删除超过X天的文件的批处理脚本(基于创建日期,而不是修改日期)

在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)

但是这个命令使用"修改"的时间戳,而我需要使用创建日期.

无需安装任何第三方程序,是否可以通过命令控制台实现此目的?

windows batch-file scheduled-tasks

4
推荐指数
1
解决办法
3万
查看次数