2

我正在尝试使用I18nSelectPipe. 我有以下内容code

this.criteria = [];
this.criteria.push({
  id: 1,
  name: 'ab'
});
this.criteria.push({
  id: 2,
  name: 'cd'
});
this.criteria.push({
  id: 3,
  name: 'ef'
});

this.criteriaChoice = {};
this.criteriaChoice['1'] = 'One';
this.criteriaChoice['2'] = 'Two';
this.criteriaChoice['3'] = 'Three';

HTML

<div *ngFor="let criterium of criteria">
  <strong>{{criterium.id | i18nSelect: criteriaChoice}}</strong>
</div>

您可能已经注意到,我正在尝试使用该管道简单地翻译“密钥” ,但它总是返回以下错误:

原始异常:管道“I18nSelectPipe”的参数“[object Object]”无效

如果我尝试如下简单的操作,它会起作用:

<strong>{{'1' | i18nSelect: criteriaChoice}}</strong>

我该如何解决这个问题?

顺便说一句,这是一个示例代码,代码不是这样硬编码的。

4

1 回答 1

2

尝试:

<strong>{{criterium.id+'' | i18nSelect: criteriaChoice}}</strong>

我在使用 Angular 2.4.10 的布尔值方面遇到了同样的问题。

当我查看代码时:

I18nSelectPipe.prototype.transform = function (value, mapping) {
    if (value == null)
        return '';
    if (typeof mapping !== 'object' || typeof value !== 'string') {
        throw new InvalidPipeArgumentError(I18nSelectPipe, mapping);
    }
    if (mapping.hasOwnProperty(value)) {
        return mapping[value];
    }
    if (mapping.hasOwnProperty('other')) {
        return mapping['other'];
    }
    return '';
};

我注意到value被管道输入的必须是一个字符串。当我value使用 转换为字符串+''时,错误消失了。

于 2017-05-12T16:58:18.037 回答