小编Ben*_*min的帖子

Angular:使用@ContentChildren 将子组件放入另一个组件中

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

angular

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

使用JSON.NET解析格式为Date(epochTime-offset)的json日期

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

.net c# timezone datetime json.net

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

标签 统计

.net ×1

angular ×1

c# ×1

datetime ×1

json.net ×1

timezone ×1