我想建立一个异步工作的工厂来返回服务,然后将该工厂提供给工厂提供商,以便在加载时为组件提供该服务.
然而,当供应商将注入TestService到TestComponent,在运行时类型ZoneAwarePromise.我需要一种方法让提供程序在将服务注入组件之前自动"等待"promise.
服务
export class TestService {
public test() {
return 123;
}
}
Run Code Online (Sandbox Code Playgroud)
提供者和工厂
export function testFactory(auth: any, temp: any) {
return new Promise((res, rej) => {
res(new TestService());
});
}
export let testProvider =
{
provide: TestService,
useFactory: testFactory,
deps: []
};
Run Code Online (Sandbox Code Playgroud)
应用模块
providers: [
testProvider
]
Run Code Online (Sandbox Code Playgroud)
TestComponent
import { Component, OnInit } from '@angular/core';
import { TestService } from './Test';
@Component({
selector: 'app-test'
})
export class TestComponent implements OnInit {
constructor(private …Run Code Online (Sandbox Code Playgroud) 我已经使用VS 2015好几个月了.每当我需要使用Git作为源代码控制在团队资源管理器中查看我的更改时,我只需双击"更改"下列出的文件,它就会打开差异视图.
然而,在周末,我不得不重新安装VS 2015.在这样做之后,我发现双击动作现在只是打开文件.这可能看起来很小,但这对我来说非常烦人.
我重新安装了社区和企业,结果是一样的.我也试过使用注册表修复程序,但我没有做任何事情,将双击操作更改回打开为diff视图.
不仅如此,我的工作计算机,目前正在使用VS 2015 Enterprise,DOES还有双击差异视图.我从该计算机导入了所有VS设置到新重新安装的计算机,但没有运气.
这非常令人沮丧.VS不仅应该在安装程序/版本之间保持一致性,它应该允许注册表修复来缓解这个问题,这显然是以前的问题.
使用元组任务时,我无法查看调试信息.EG当一个断点被击中时,我无法在悬停,本地窗口或观察窗口中查看任何变量.
repro只是创建一个新的WPF应用程序,添加System.ValueTuple,将此代码添加到MainWindow.xaml.cs,然后使用"return"在两行设置断点.
using System.Threading.Tasks;
using System.Windows;
namespace WpfApp2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
var task1 = TaskWithLocalDebugInfo();
var task2 = TaskWithoutLocalDebugInfo();
}
private async Task<bool> TaskWithLocalDebugInfo()
{
var viewableInLocalWindowAndHover = true;
return viewableInLocalWindowAndHover;
}
private async Task<(bool, bool)> TaskWithoutLocalDebugInfo()
{
var notViewableInLocalWindowAndHover = true;
return (notViewableInLocalWindowAndHover, notViewableInLocalWindowAndHover);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果我添加不可见的局部变量来观察,我得到: error CS8182: Predefined type 'ValueTuple`2' must be a struct.
@Component({
selector: 'app-custom-paginator',
template: '<mat-paginator #paginator pageSize="10"></mat-paginator>',
})
export class CustomPaginator extends MatPaginator {
@ViewChild(MatPaginator) paginator: MatPaginator;
customMethod(): number {
return 1
}
}
Run Code Online (Sandbox Code Playgroud)
主要成分:
@Component({
selector: 'app-main-component',
template: '<app-custom-paginator></app-custom-paginator>',
})
export class MainComponent implements OnInit, AfterViewInit {
@ViewChild(CustomPaginator) paginator: CustomPaginator;
}
Run Code Online (Sandbox Code Playgroud)
我想找出一种方法来扩展MatPaginator.我被困住了,因为在我的子组件中CustomPaginator,我不得不使用它@ViewChild来访问MatPaginator从其视图创建的自定义分页器创建的.
我真正想要的是以某种方式创建一个CustomPaginator来自我MainComponent而不CustomPaginator需要创建和访问MatPaginator它自己的视图子,因为CustomPaginatorIS a MatPaginator.
using System.Buffers;
const byte carriageReturn = (byte)'\r';
const int arbitrarySliceStart = 5;
// using Memory<T>
async Task<int> ReadAsyncWithMemory(Stream sourceStream, int bufferSize)
{
var buffer = ArrayPool<byte>.Shared.Rent(bufferSize);
var bytesRead = await sourceStream.ReadAsync(buffer);
var memory = buffer.AsMemory(arbitrarySliceStart, bytesRead);
var endOfNumberIndex = memory.Span.IndexOf(carriageReturn);
var memoryChunk = memory.Slice(0, endOfNumberIndex);
var number = BitConverter.ToInt32(memoryChunk.Span);
ArrayPool<byte>.Shared.Return(buffer);
return number;
}
// using Span<T> without assigning to variable
async Task<int> ReadAsyncWithSpan(Stream sourceStream, int bufferSize)
{
var buffer = ArrayPool<byte>.Shared.Rent(bufferSize);
var bytesRead = await sourceStream.ReadAsync(buffer);
var endOfNumberIndex = buffer.AsSpan(arbitrarySliceStart, …Run Code Online (Sandbox Code Playgroud) angular ×2
c# ×2
.net ×1
.net-core ×1
azure-devops ×1
c#-7.0 ×1
inheritance ×1
memory ×1
typescript ×1