Angular: 如何根据物品的属性显示icon.png?

Angular: How to show icon.png depending on the attribute of a item?

我有一个对象数组,如下所示:

[{"name":"Steve", "hourly_wage":16, "status":"part-time"},
{"name":"Maria", "hourly_wage":25, "status":"full-time"},
{"name":"Jose", "hourly_wage":21, "status":"former"}]

我想为每个人的就业状况显示一个图标。一个完整的圆圈代表全职,一个半圈代表兼职,一个空圈代表前任。我怎样才能在 Javascript/Angular 中做到这一点?我在想 ng-hide 中的某种 if 语句?

这取决于您导入这些图标的方式。它们是图像吗?字体? 假设您使用图像并且它们被命名为 part-time.jpg、full-time.jpg、former.jpg 并且都放在某个 /resources 文件夹中

<div ng-repeat="obj in list">
    <img ng-src="/resources/{{obj.status}}.jpg"/>
    {{obj.name}}
</div>

这也适用于字体等

你应该使用状态 属性 作为你的条件,并在你的 html 中做类似的事情:

<div ng-src="/images/icons/{{ status }}.png"></div>

...这会出现 <div src="/images/icons/part-time.png"></div> 或它匹配的任何内容。

确保使用 ng-src,而不是 src,因为您会遇到在呈现 AngularJS 之前加载页面并且浏览器将查找包含{{ foo }} 的名字当然不会存在。

此外,请避免使用其他一些人所展示的无关逻辑(恕我直言)。只需将另一个 属性 添加到您的 JSON 并根据其状态显示图标。例如,如果 status 是 full-time,icon 可以是 JSON 中的 'full-circle.png',或者您可以只使用 status 作为图标的名称来使事情变得更简单。

例如:

{
   status: 'full-time', icon: 'full-circle.png'
}

甚至:

{
   status: 'full-time'
}

然后将您的图标命名为 full-time.png,这样您就可以轻松地在 HTML 中使用它,而无需额外的逻辑或属性。

我认为最通用的方法是创建一个映射,然后使用它。

JS:

$scope.statusIconMapping = {"part-time": "half_circle.jpg", 
    "full-time": "full_circle.jpg", 
    "former": "empty_circle.jpg"
};

标记:

<div ng-repeat="employee in employees">
    ...
    <img src="{{statusIconMapping[employee.status]}}" />
</div>