【问题标题】:Knockout Typescript Passing object without wrapperKnockout Typescript 传递没有包装器的对象
【发布时间】:2016-06-18 04:30:53
【问题描述】:

我有一个自定义组件,可以将对象传递给该组件的视图模型。这个使用打字稿。对象到达构造函数,但通过敲除被包装在匿名对象中。

有没有办法防止这种情况,只获取强类型值对象?

在构造函数中我得到这个:

 Object { value: Order, $raw: Object }

我想立即获得价值/订单。

这是我的代码:

index.html:

<div data-bind="foreach: Orders"/>
     <my-component params="value: $data"></my-component>
</div>

component.html:

 <span data-bind="text: Name"></span>

组件.ts

ko.components.register('my-component', {
     viewModel: ComponentVm,
     template: component.html"
});

组件.ts:

class ComponentVm{
     public Name:string;

     constructor(order:Order){
          this.Name = order.Name; //Problem here because of anonymous object
     }
}

订单.ts:

Class Order {
      public Name:string = "Bob";
      constructor(){}
}

一种解决方案是:

 class ComponentVm{
     public Name:string;

     constructor(anonymousObject:any){
          let order = anonymousObject.value;
          this.Name = order.Name;
     }
}

但这不是很好。

【问题讨论】:

    标签: knockout.js typescript components


    【解决方案1】:

    您可以在“Component.ts”中指定“params”对象类型:

    class ComponentVm {
         public Name:string;
    
         constructor(params: { order: Order }){
              this.Name = params.order.Name;
         }
    }
    

    【讨论】:

      【解决方案2】:

      很确定简短的回答是“不”。 Components receive a params argument。但这并不意味着您必须使用 any 类型。您的 params 对象应该是明确定义的。

      params — 将传递给组件的对象。 通常这是一个包含多个参数的键值对象, 并且通常由组件的 viewmodel 构造函数接收。

      【讨论】:

      • 对不起,恐怕我没跟上。如果我无法控制 params 对象,我该如何定义它?它应该是一个订单(这是参数的定义)。
      • 不,它是一个包含订单的对象。
      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2017-09-30
      • 2021-02-11
      • 2014-10-09
      • 1970-01-01
      • 2021-07-13
      • 2015-12-13
      相关资源
      最近更新 更多