小编MGD*_*ies的帖子

我如何模拟RxJs 6计时器?

我们最近从Angular 5更新到Angular 6,并使用它更新了RxJs 6.作为迁移的一部分,计时器使用率已从以下变化:

Observable.timer()
Run Code Online (Sandbox Code Playgroud)

timer()
Run Code Online (Sandbox Code Playgroud)

在我们的测试中有很多地方我们使用以下模式模拟计时器可观察量.

let timerObserver: Observer<any>;

 beforeEach(() => {
 spyOn(Observable, 'timer').and.returnValue(Observable.create(
    ((observer: Observer<any>) => {
      timerObserver  = observer;
    })
  ));
});

it(`should not have any notifications by default`, () => {
   timerObserver.next('');
   ...
});
Run Code Online (Sandbox Code Playgroud)

有人知道如何迁移这种模式吗?


编辑:我在这里创建了一个简化的问题说明:

https://stackblitz.com/edit/angular-v6-testing-template-nm7add

// Hello.Component
      ngOnInit() {
        const timer$ = timer(30);
        timer$.subscribe(() => {
          this.testMe = 'this has been changed';
        });
      }

// Hello.component.spec
  it('should set testMe after a given timer', fakeAsync(() => {
    tick(50);
    expect(fixture.componentInstance.testMe).toBe('this has been changed');
  })); …
Run Code Online (Sandbox Code Playgroud)

jasmine angular rxjs6

9
推荐指数
1
解决办法
3084
查看次数

Angular WithCredentials 不适用于 POST、PUT

我正在开发一个 Angular 网站:

\n\n

\xe2\x80\xa2 localhost/test 上的 .Net Framework 服务器

\n\n

本地主机上的 \xe2\x80\xa2 客户端:4200

\n\n

我的 cookie 身份验证工作正常,并且我的 GET 请求工作正常。

\n\n
   this.httpClient.get<Test>(\'dummyUrl\', { withCredentials: true });\n
Run Code Online (Sandbox Code Playgroud)\n\n

在服务器的 web.config 中,我有以下内容。

\n\n
    <add name="Access-Control-Allow-Credentials" value="true"/>\n    <add name="Access-Control-Allow-Origin" value="http://localhost:4200" />\n    <add name="Access-Control-Allow-Methods" value="*" />\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

鉴于此设置,我希望同样适用于 PUT 和 POST 请求。

\n\n
    this.httpClient.put(\'dummyUrl\', this.payload, { withCredentials: true });\n
Run Code Online (Sandbox Code Playgroud)\n\n

我由此收到 401 Unauthorized 错误。

\n\n
\n\n

我的调查

\n\n

我看到的请求方法是 OPTIONS,它告诉我这在飞行前失败,并且这个问题与 CORS 而不是 Angular 相关。我一直无法弄清楚我错过了什么。

\n\n

我将不胜感激任何指导。

\n

.net httpclient cors angular

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

Angular Proxy.Conf.Json 不适用于多个 api

我有以下 proxy.conf.json、日志行和 api 调用。

  {
  "/first/api/": {
    "target": "/first/api/",
    "secure": false,
    "logLevel": "debug"
  },
  "/second/api/": {
    "target": "/second/api/",
    "secure": false,
    "logLevel": "debug"
  }


[HPM] GET /first/api/values-> /first/api/
[HPM] GET /second/api/dummy -> /second/api/

return this.http.get<any>(this.firstApi + 'values')
return this.http.get<any>(this.secondApi + 'dummy')
Run Code Online (Sandbox Code Playgroud)

鉴于我可以看到日志行,我相信 proxy.conf.json 正确接收了 api 调用,但是当调用消失时我收到了 404。日志只输出目标,所以我不清楚如何编写我需要的 url,例如: localhost/first/api/values

当只有一个 api 时,这可以正常工作:

  {
  "/api/": {
    "target": "/first/",
    "secure": false
  }
Run Code Online (Sandbox Code Playgroud)

有人可以建议我进一步的调试步骤吗?


解决了

yanky_cranky 的回答是正确的。作为了解他的回答与我所看到的内容有何关联的助手,我还需要查看我的 IIS 日志。在这里我可以看到被调用的网址。

angular-cli angular

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

在纯javascript中对数组进行排序时的最佳实践,如果我必须将一个组发送到后面

如果我有以下数组:

[0, 1, 3, 0, 4, 2]
Run Code Online (Sandbox Code Playgroud)

而且我想按升序排序,除了我最后需要的零:

[1, 2, 3, 4, 0, 0]
Run Code Online (Sandbox Code Playgroud)

请记住,我无权访问此解决方案的下划线或linq.js.我目前的解决方案有效,但感觉很重,很长,而且不是很优雅.这是我的代码:

        function sortNumbers(numbers) {
        var zeroNumbers = [];
        var notZeroNumbers = [];

        for (var i = 0; i < numbers.length; i++) {
            if (numbers[i] === 0) {
                zeroNumbers.push(numbers[i]);
            } else {
                notZeroNumbers.push(numbers[i]);
            }
        }

        var sortedNumbers = notZeroNumbers.sort(function (a, b) {
            return parseFloat(a) - parseFloat(b);
        });

        for (var x = 0; x < zeroNumbers.length; x++) {
            sortedNumbers.push(zeroNumbers[x]);
        }

        return sortedNumbers;
    }
Run Code Online (Sandbox Code Playgroud)

我可以改进这个解决方案吗?

javascript

2
推荐指数
2
解决办法
1296
查看次数

如何在单个文本框中包含多行?

我有以下 MVC6 形式的文本框。

 <input type="text" asp-for="EmptyTask.TaskDetails" placeholder="New Task" class="txt-newTask" />
Run Code Online (Sandbox Code Playgroud)

以及以下 CSS:

.txt-newTask{
height: 150px;
min-width: 400px;
max-width: 400px;
}
Run Code Online (Sandbox Code Playgroud)

这看起来像这样:

文本框

“新任务”文本出现在文本框的中心,如果我继续打字,它会从右侧边缘继续。

我的目标是在同一个框中有一个跨越多行的单个文本框。

有任何想法吗?谢谢!

css textbox asp.net-core-mvc

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

如何访问 [cdkPortalOutlet] 中的组件引用

我正在实施 Angular 的 CDK 门户来加载动态组件。我能够使用给定的 html 和 app.ts 快速轻松地将组件加载到页面上。

加载组件后,我想访问它的接口方法doSomething(),但是我似乎无法访问已加载的组件。

是否可以访问该组件?


类/接口:

interface IPortalThing {
    doSomething(){...}
}
class PortalThingComponent
class OtherPortalComponent
Run Code Online (Sandbox Code Playgroud)

网址:

<ng-template [cdkPortalOutlet]="portal"></ng-template>
Run Code Online (Sandbox Code Playgroud)

应用程序

portal: Portal<any>;
...

loadComponent() {
    this.portal =  new ComponentPortal(PortalThingComponent));
}
Run Code Online (Sandbox Code Playgroud)

我试图通过以下方式给出类型的指示:

portal: Portal<IPortalThing>;
...

loadComponent() {
    this.portal =  new ComponentPortal<IPortalThing>(PortalThingComponent));
}
Run Code Online (Sandbox Code Playgroud)

但是,由于以下错误,这样做使我无法设置 this.portal:

Type 'ComponentPortal<IPortalThing>' is not assignable to type Portal<IPortalThing>'.
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑。

angular angular-cdk

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