Javascript AngularJS逻辑应该放在HTML文件中吗?

Javascript AngularJS逻辑应该放在HTML文件中吗?,javascript,html,angularjs,separation-of-concerns,Javascript,Html,Angularjs,Separation Of Concerns,我想重构代码,我在下面举了一些例子。我对AngularJS很陌生。现在当我看到代码时,我对HTML代码中的所有逻辑都很好奇 <p ng-show="countForm.count.$dirty && countForm.count.$error.min" class="error-message"> <button ng-click="step(2)" ng-show="data.step == 1 && countForm.count.$di

我想重构代码,我在下面举了一些例子。我对AngularJS很陌生。现在当我看到代码时,我对HTML代码中的所有逻辑都很好奇

<p ng-show="countForm.count.$dirty && countForm.count.$error.min" class="error-message">

<button ng-click="step(2)" ng-show="data.step == 1 && countForm.count.$dirty" ng-disabled="countForm.$invalid" class="line-break">

<div ng-class="{selected: data.spreadChoice == 3}" ng-click="data.spreadChoice = 3; step(3)" ng-mouseover="data.preSpreadChoice = 3" ng-mouseout="data.preSpreadChoice = data.spreadChoice">

<div ng-show="data.step >= 2" class="step" ng-class="{active: data.step == 3, done: data.step > 3, left: data.preSpreadChoice == 1, right: data.preSpreadChoice == 3}" ng-scroll-here="data.step == 3">

<p ng-switch-when="false" class="large">[[data.emails.length]] von [[data.count]] – <span class="red">[[Math.max(0,data.count-data.emails.length)]]</span> Members</p>

<div ng-show="data.step >= 5 && data.multipleTeams"  class="step" ng-class="{done: data.step > 5, active: data.step == 5}" ng-scroll-here="data.step == 5">

<button class="small" ng-disabled="!unitsForm.$dirty || unitsForm.$invalid" ng-click="addUnit(data.nextTeam, data.nextTeamleaderEmail)">

[[data.emails.length]]von[[data.count]]–[[Math.max(0,data.count data.emails.length)]成员


HTML不应该包含类或属性,而逻辑本身应该放在JS文件或JS代码中吗?这是开发AngularJS的一种好方法(或者至少是一种常见的方法)吗?还是应该避免在HTML中放置逻辑?

使用角度指令在HTML中放置逻辑是一种好方法。如果不在HTML中放置逻辑,就无法充分利用angular

控制器应该包含视图逻辑,但不应该实际引用DOM(只应该通过指令来引用DOM)

AngularJS需要记住的两件事或最佳实践是

  • 在视图中将作用域视为只读
  • 在控制器中将作用域视为仅写
由于要在HTML中放置逻辑,如果将其视为只读,则可以使用作用域中的函数检查条件或提取数据,但无论在HTML中执行什么操作,原始数据模型都不会受到干扰

此外,将dom元素与特定指令联系起来是angular最强大的功能

在jQuery中使用日期选择器时,可以执行以下操作:

<div id="datepicker"></div>
你可以这样做,如下所示

这样,即使设计师或阅读HTML的人能够读取内容,甚至可以从元素属性本身传递选项

<div date-picker start="today" end="tomorrow" show-time="true"></div>

AngularJS的重要性本身就是声明性语法,可以像您发布的那样包含表达式作为属性值。这完全不是一个坏习惯。事实上,这是所有开发人员都做的常见且良好的实践。在angularjs中使用HTML中的逻辑可以节省我们自己编写的大量代码。所有的举重动作都是在幕后完成的

如果你问我:

  • 客户端业务逻辑位于注入到指令\控制器的服务中
  • UI逻辑被假定放置在控制器中
  • 现在,关于向视图中添加逻辑,如果我们讨论的是业务逻辑,那么它是一个大禁忌。在您的控制器上使用一种方法,该方法将评估使用该服务的内容


    如果我们谈论的是
    ng If
    /
    ng show
    条件,那么只有当它们很小且“可读”时,我才会将它们添加到视图中。当问题不止这些时,我会将它们移到控制器上进行调试,因为我相信HTML应该是可读的。

    因为功能在那里,所以它显然是要被使用的。在实践中,您可能希望避免将过于复杂的逻辑放入属性中,但无法完全避免将逻辑放入属性中。如果你尝试的话,你的控制器会变得非常混乱。这是有角度的。疯狂的东西。
    <div date-picker start="today" end="tomorrow" show-time="true"></div>