angularJS应用程序中简单逻辑的位置

angularJS应用程序中简单逻辑的位置,angularjs,Angularjs,我想知道在angularJS应用程序中哪个更可取 在html中,我可以 (a) 我总是使用这个变体,因为它更干净,但我想这是因为不同的开发人员不同 <span ng-class="categoryIcon"> 这是偏好的问题,但我更喜欢选项b) 控制器中设置了类别 如果您提前考虑,如果添加了新的类别,html将变得冗长、难看且容易出错。另外,如果将来要在html的多个位置使用categoryIcon,该怎么办。简单地引用ng class=“categoryIcon”比将选项a)

我想知道在angularJS应用程序中哪个更可取

在html中,我可以

(a)


我总是使用这个变体,因为它更干净,但我想这是因为不同的开发人员不同

  <span ng-class="categoryIcon">

这是偏好的问题,但我更喜欢选项b)

控制器中设置了
类别


如果您提前考虑,如果添加了新的类别,html将变得冗长、难看且容易出错。另外,如果将来要在html的多个位置使用
categoryIcon
,该怎么办。简单地引用
ng class=“categoryIcon”
比将选项a)复制到多个位置要好得多。

我不知道为什么这里的其他答案被否决,因为这是对最佳实践的意见,没有具体的对错答案,但我更喜欢一次性使用的解决方案a,以及当必须在视图中重复时,在B处暗示的解决方案

我倾向于认为视图应该能够处理它认为合适的数据模型。我们在这里讨论的不是真正的业务逻辑,我不想跳进控制器代码来查看传递的是什么类

但是,如果您到处都在使用这个条件块,那么至少在控制器中创建一些方便的方法肯定是有意义的:isCarSuv()、isBus()等等。那么ng类条件块会更干净

<span ng-class="{'car-icon': isCarSuv(),'bus-icon': isBus(),'bike-icon': isBike()}">

我真的不认为一个纯B风格的实现是我应该做的


只要我的两分钱。其他人肯定不同意。

我倾向于选择b)当设置
ng class
属性的条件比单个比较更复杂时。主要是为了可读性,但也为了可维护性,正如您所说,逻辑不必依赖于UI。这取决于用户。如果这是一个您希望在每个摘要周期中执行的操作,那么它肯定需要在模板中,但是,如果它是一个非常简单的操作,比如一个基本条件,那么在模板中执行它不会有任何实际的性能缺陷,只有可维护性。但是,同时,我也不想让我的控制器被一些一次性的逻辑弄得乱七八糟,而这些逻辑只是模板为了演示而需要的。例如,一个基本的可折叠面板可以完全在模板中构建,而控制器不需要知道它。@KevinB也许我的示例不是最好的。可折叠面板我想我会同意的。在其他示例中,我需要构建一个url,该url有条件地基于来自中间层的数据。CSS决策也基于来自中间层的数据。正如马特迪奥尼斯指出的那样,随着新类别的增加,使用a)方式可能会失控,并且不易维护。因为它的价值,a)这个例子已经在应用程序中的两个地方出现了。我更喜欢一个类似于@Michaelor所做的解决方案。为什么它会被贬低?因为它只是一个观点,我想任何人都可以判断它是对的还是错的,并且是正确的。为什么我把这个标记为答案:这是一个最佳/更好的实践问题,所以你可能不同意这个。这种做法允许从UI中删除逻辑,并将其封装在控制器中。逻辑可以随时间增长,而不改变UI。这也是更可重用的,将来如果您需要更改逻辑,您只需要在一个地方(控制器)进行更改。没有人提到测试,但我觉得测试控制器很简单。我非常喜欢这个实现,因为我们让模板根据上下文单独管理它的类,但是定义这个上下文的规则放在控制器中,我认为这是一个很好的观点。此外,可读性非常好:“如果isBus()返回true,则应用总线图标类”等等。。。
  <span ng-class="categoryIcon">
<span ng-class="{'car-icon': isCarSuv(),'bus-icon': isBus(),'bike-icon': isBike()}">