Angularjs 从ng类内部访问特定于div的变量

Angularjs 从ng类内部访问特定于div的变量,angularjs,ng-class,Angularjs,Ng Class,对于我的一个项目,我有一个带有三个条件ng类的div,看起来像: <div name="type" ng-class="{'class-one' : stringVariable != "type", 'class-two': stringVariable == "type" && booleanTrue, 'class-three': stringVariable == "type" && !booleanTrue}">My type div.<

对于我的一个项目,我有一个带有三个条件ng类的div,看起来像:

<div name="type" ng-class="{'class-one' : stringVariable != "type", 'class-two': stringVariable == "type" && booleanTrue, 'class-three': stringVariable == "type" && !booleanTrue}">My type div.</div>
<div name="type" ng-class="{'class-one' : stringVariable != $this.name, 'class-two': stringVariable == $this.name && booleanTrue, 'class-three': stringVariable == $this.name && !booleanTrue}">My type div.</div>
我的类型div。
这是我希望它运行的方式,问题是当我有几个div使用相同的功能时:

<div name="type" ng-class="{'class-one' : stringVariable != "type", 'class-two': stringVariable == "type" && booleanTrue, 'class-three': stringVariable == "type" && !booleanTrue}">My type div.</div>
<div name="date" ng-class="{'class-one' : stringVariable != "date", 'class-two': stringVariable == "date" && booleanTrue, 'class-three': stringVariable == "date" && !booleanTrue}">My date div.</div>
<div name="name" ng-class="{'class-one' : stringVariable != "name", 'class-two': stringVariable == "name" && booleanTrue, 'class-three': stringVariable == "name" && !booleanTrue}">My name div.</div>
我的类型div。
我的约会部门。
我叫迪夫。
同样,这是可行的,但似乎效率低下且笨拙。每次一个div使用这个功能时,我最终都不得不更改每个ng类表达式中的变量,而任何未来的重构都将是底层的一大难题

我试图找到一种方法,在div中定义一个变量,然后在ng类中使用它,例如:

<div name="type" ng-class="{'class-one' : stringVariable != "type", 'class-two': stringVariable == "type" && booleanTrue, 'class-three': stringVariable == "type" && !booleanTrue}">My type div.</div>
<div name="type" ng-class="{'class-one' : stringVariable != $this.name, 'class-two': stringVariable == $this.name && booleanTrue, 'class-three': stringVariable == $this.name && !booleanTrue}">My type div.</div>
我的类型div。
不幸的是,也许很明显,这是行不通的

有没有办法让这类事情奏效


  • 注1:如果不可能,我将通过控制器定义类,但我真的希望找到一种方法使其通过ng类工作
  • 注2:如果可能,我希望避免使用外部指令

快速解决方案可以是在模板中使用范围方法,而不是变量。这样,您可以更新方法的内部代码,但方法名称保持不变,这在很大程度上防止了由于逻辑重构而导致的中断

所以你可以试试这个:

<div name="type" ng-class="{'class-one' : isValidForType()}"

最后,答案是,正如Tushar所建议的,将所有逻辑移到一个单独的函数中,并以这种方式返回ng类名

因此,我们在模板中有:

<div ng-class="myMethod("type")">

这似乎是创建您自己的指令的好时机。@ryanyyu但我不想…:'(更严重的是,我觉得奇怪的是,没有办法做像
这样的事情,我会认为这类事情是基本的和有用的。你也可以在控制器中定义对象,然后像
那样绑定,但这基本上是元素指令最好封装的。这似乎是一个好的解决方案。尽管h在ng类中,您可以简单地调用函数并在逻辑中返回类名,如
ng class=“isValidForType('type')”
我不知道这是如何工作的,抱歉:/在我的示例中,我有三个具有不同名称的div,每个具有三个ng类。我是否要将isValidForType()放在对于每个ng类,在每个div中?好的,我知道了。在接受它之前,我将在未来几天详细介绍一下这个答案注意:我试图将此作为@Tushar答案的编辑,但被拒绝了。