我在 Angular 6 中创建了一个自定义轮播组件。简单的用法是这样的:
<mpx-carousel>
<div *mpxCarouselItem>Slide 1</div>
<div *mpxCarouselItem>Slide 2</div>
<div *mpxCarouselItem>Slide 3</div>
</mpx-carousel>
Run Code Online (Sandbox Code Playgroud)
但它也支持嵌套,如下所示:
<mpx-carousel>
<div *mpxCarouselItem>Slide 1</div>
<div *mpxCarouselItem>
<mpx-carousel>
<div *mpxCarouselItem>Sub-slide A</div>
<div *mpxCarouselItem>Sub-slide B</div>
</mpx-carousel>
</div>
<div *mpxCarouselItem>Slide 3</div>
</mpx-carousel>
Run Code Online (Sandbox Code Playgroud)
在父CarouselComponent代码中,我想确定是否有 child CarouselComponents,并访问它们的属性。所以我使用@ContentChildren:
@ContentChildren(CarouselComponent, { descendants: true })
childCarousels: QueryList<CarouselComponent>;
ngAfterContentInit() {
console.log(this.childCarousels.length); // 1, BUT it's a reference to itself, not the child
}
Run Code Online (Sandbox Code Playgroud)
在父轮播的 ngAfterContentInit 中,我看到@ContentChildren 找到了 1 个子 CarouselComponent,这看起来不错。但是仔细检查发现它实际上找到了这个父轮播本身,而不是它的孩子。为了真正找到儿童轮播,我必须订阅 childCarousel.changes:
@ContentChildren(CarouselComponent, { descendants: true })
childCarousels: QueryList<CarouselComponent>;
ngAfterContentInit() { …Run Code Online (Sandbox Code Playgroud) 我在C#中使用Json.net 7.0.1来使用rest API.问题在于API在其JSON响应中使用的日期格式.它看起来像这样:
/Date(1445301615000-0700)/
Run Code Online (Sandbox Code Playgroud)
这意味着代表2015-10-19 17:40:15的UTC时间
如果您插入1445301615000成一个划时代的时间转换器,你看,这是2015-10- 20 00:40:15.所以比UTC提前7个小时.然后他们包括-0700可能是为了抵消回到UTC.所以,为了给我一个UTC时间,他们发给我UTC + 7-0700.为什么他们这样做我不知道,但我不能改变它.
我的问题是,如何最好地使Json.NET解析该日期字符串并提出2015-10-19 17:40:15UTC 的DateTime .我可以编写一个自定义JsonConverter来劫持该值并手动操作它,但我想知道是否有更原生的方法.
我已经尝试将JsonSerializerSettings DateTimeZoneHandling属性更改为其所有不同的值.将它设置为Utc只是忽略时区偏移,屈服2015-10-20 00:40:15.将其设置为Local,Unspecified或RoundtripKind都是产量2015-10-19 20:40:15,我认为这是因为我的本地时区是UTC-4,所以它试图将该调整应用于2015-10-20 00:40的主日期值.
我还考虑使用该DateFormatString属性来表示预期的日期字符串格式.但我找不到正确的格式字符串字符来表示这个epochtime-offset格式.
这是一个简化的例子:
Person person;
string json = @"{ 'Name': 'John',
'LastSeen':'/Date(1445301615000-0700)/' }"; // 1445301615000 = 2015-10-20 00:40:15
person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.LastSeen); // 10/19/2015 8:40:15 PM Kind = Local
person = JsonConvert.DeserializeObject<Person>(json, new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat });
Console.WriteLine(person.LastSeen); // 10/19/2015 8:40:15 PM Kind = …Run Code Online (Sandbox Code Playgroud)