Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AngularJS中定义第二次ng单击_Angularjs - Fatal编程技术网

在AngularJS中定义第二次ng单击

在AngularJS中定义第二次ng单击,angularjs,Angularjs,下面是使用AngularJS单击按钮文本颜色的代码 <button ng-class="myClass" ng-click="myClass='red'" ng-init="myClass='blue'"> some text </button> 一些文本 是否可以在第二次单击时将颜色更改为绿色?(蓝色->红色->绿色) 我的直觉告诉我,没有controller+自定义JS代码是不可能的,但可能有一个简单的方法。检查这是否可以接受 <div ng

下面是使用AngularJS单击按钮文本颜色的代码

<button ng-class="myClass"
   ng-click="myClass='red'"
   ng-init="myClass='blue'">
some text
</button>

一些文本

是否可以在第二次单击时将颜色更改为绿色?(蓝色->红色->绿色)


我的直觉告诉我,没有controller+自定义JS代码是不可能的,但可能有一个简单的方法。

检查这是否可以接受

<div ng-app>
    <button ng-class="myClass" ng-click="counter = counter + 1; myClass=classes[counter % 3]" ng-init="myClass='blue'; classes=['blue', 'red', 'green']; counter=0">some text</button>
</div>

一些文本

演示:

可能有更好的方法,但如果重命名类:

.statetrue{
  color:red
}

.statefalse{
  color:blue
}
然后,您的按钮:

<button ng-class="'state' + myClass" ng-click="myClass = !myClass"  ng-init="myClass=true">


ngClass
,当给定对象时,设置属性值真实的类

注意:视图不应该包含任何业务逻辑,因为它们很难测试;它们只应与控制器交互

对此的澄清:


您不应该做的是,直接从视图更改范围中的属性。在控制器中有一个函数充当包装器,它可以为您实现这一点。视图可以根据作用域属性和控制器中的调用函数来操作数据,更改自身的呈现方式。此外,控制器不应该知道您想要如何显示数据,它应该表现为根本没有视图(事实上,视图应该是可重放的)。您想要应用哪个css类不是您的控制器应该知道/决定的。

Hmm,比我的示例:dwy您为什么觉得需要在没有控制器的情况下执行状态更改操作?这个状态不需要存储在某个地方吗?下面提供的解决方案是可行的,但它们要求您在模板中加入相当多的逻辑,这是不美观的,会阻碍测试,并且会降低代码的可移植性。你能再详细说明一下你的用例吗?@joshdavidimiller没有用例。我只是问是否可以用酒吧的方式做foo。听起来很奇怪,有些方法可以处理2个状态,但不能处理3个状态,尽管我知道第一个红色->蓝色不是关于状态的。顺便问一下,绿色在哪里?:)对,视图不应该包含业务逻辑。那么,我甚至不应该使用第一个示例使用View将颜色从红色更改为蓝色吗?明白了!可惜我还没有投票权。我希望其他人会。
function MyCtrl($scope) {
  $scope.active = false;
  $scope.toggleActive = function () {
    $scope.active = !$scope.active; 
 };
}
<div ng-class="{red: !active, green: active}" ng-click="toggleActive()"></div>