basvandenberg/ng-select 简单字符串数组的问题

basvandenberg/ng-select issue with simple string array

我正在使用以下 ng-select 模块,但在使用简单数组时遇到问题。

https://github.com/basvandenberg/ng-select

它期望的选项格式是一个对象数组:

{
   value: string;
   label: string;
}

但是我没有提供数据的选项。

我的对象:

{
    name: "something",
    tags: ["option1","option2","option3"],
    tagPrimary: "",
    ...
}

在我的 Angular5 组件模板中:

<ng-select
      placeholder="Select a primary option..."
      [(ngModel)]="obj.tagPrimary"
      [options]="obj.tags">
</ng-select>

现在使用它时,生成的下拉菜单有 3 个选项但不显示任何内容,因为它正在寻找带有标签键的对象。

我试图创建一个可以正确格式化数据的函数。

function format(tags){
    arr=[];
    _.each(tags,function(tag){
        obj.push({label: tag, value: tag});
    }
    return obj;
}

<ng-select
          placeholder="Select a primary option..."
          [(ngModel)]="obj.tagPrimary"
          [options]="format(obj.tags)">
</ng-select>

尽管它现在确实可以正确呈现下拉菜单,但项目无法select。在 DOM 检查器中查看源代码时,似乎每个选项上的样式属性都会 disappear/reappear (就像它正在重新初始化函数被一遍又一遍地触发一样。)

函数创建是否正确?

与其直接在模板中分配 [options]="format(obj.tags)",这可能会导致该方法在每个更改检测周期触发,您应该将 format() 方法的 return 值分配给另一个方法'property' 在您的组件中并在模板中使用 属性。

假设您的 objngOnInit() 中可用(否则您应该在 obj 属性 可用且组件中的值可用时进行此分配),

在你的组件中,

optionsForSelect: { label: string; value: string; }[]; // specifying the type, not necessary though, a type of 'any[]' would be sufficient

format(tags){
  arr=[];
  _.each(tags,function(tag){
      arr.push({label: tag, value: tag});
  }
  return arr;
}

ngOnInit() {
  //after you get 'obj' property
  this.optionsForSelect = this.format(this.obj.tags);
}

在您的模板中,

<ng-select
    placeholder="Select a primary option..."
    [(ngModel)]="obj.tagPrimary"
    [options]="optionsForSelect">
</ng-select>