我们最近从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) 我正在开发一个 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 });\nRun 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="*" />\nRun Code Online (Sandbox Code Playgroud)\n\n鉴于此设置,我希望同样适用于 PUT 和 POST 请求。
\n\n this.httpClient.put(\'dummyUrl\', this.payload, { withCredentials: true });\nRun Code Online (Sandbox Code Playgroud)\n\n我由此收到 401 Unauthorized 错误。
\n\n我的调查
\n\n我看到的请求方法是 OPTIONS,它告诉我这在飞行前失败,并且这个问题与 CORS 而不是 Angular 相关。我一直无法弄清楚我错过了什么。
\n\n我将不胜感激任何指导。
\n我有以下 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 日志。在这里我可以看到被调用的网址。
如果我有以下数组:
[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)
我可以改进这个解决方案吗?
我有以下 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)
这看起来像这样:
“新任务”文本出现在文本框的中心,如果我继续打字,它会从右侧边缘继续。
我的目标是在同一个框中有一个跨越多行的单个文本框。
有任何想法吗?谢谢!
我正在实施 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 ×4
.net ×1
angular-cdk ×1
angular-cli ×1
cors ×1
css ×1
httpclient ×1
jasmine ×1
javascript ×1
rxjs6 ×1
textbox ×1