AngularJS ng-click 和内部 2 个表达式的问题,只有一个触发

AngularJS issue with ng-click and 2 expressions inside, only one fires

我有一个问题,在 ng-click 中我有 2 个表达式,只有一个触发。

如果我一次只使用一个表达式,它们都可以工作,但一起使用就不行了。

一个是函数,一个是简单的:button = !button;我用它来触发按钮状态。

所有这些都在 ng-repeat 中,所以我会得到多个按钮,每个按钮都必须有自己的状态。

我看到的是,如果不是做:button = !button,它只能单独工作,但不能与函数一起工作(所以 ng-click= "func(); button = !button" 不会触发第二个表达式)。

但是如果我像这样在控制器中声明一个简单的 bool

button: boolean;
this.button = false;

然后使用:ng-click= "func(); $scope.button = !$scope.button"

它会正确触发两个表达式,但这里的问题是我使用的是 ng-repeat,所以如果生成 10 个按钮,当你单击一个按钮时,使用此解决方案,所有 10 个按钮都会被触发,因为他们使用相同的 bool.

因此,为了避免在我循环的对象列表中添加新的 属性,仅针对按钮状态,是否有更简单的解决方案?

我什至不明白为什么在控制器中使用声明的 boolean 会起作用,而在视图中使用简单的 var = !var 却不行。

我尝试使用一个虚拟函数来代替,只有一个 console.log return 并且它可以工作,所以它也可能与我的函数有关,但是再一次,为什么它会工作使用声明的布尔值而不是视图中的直接表达式?

该函数有点长,并且会调用其中的其他函数,因此就我的问题而言,我认为发布它并不相关,并且制作 fiddle 也会很复杂,因为该函数需要数据直接来自 API.

但重要的是该功能正确运行并且在项目中的多个地方使用它。

谢谢

您可以像下面的代码那样尝试,它会让您做您正在寻找的事情,另外请检查 this plunker 以了解您的示例场景。

模板:

<div ng-repeat="btn in buttonList">
  <button type="button" value="btn.value" ng-click="func();btn.button=!btn.button" ng-disabled="btn.button">{{btn.name}}</button>
</div>

控制器:

$scope.buttonList = [{
    name: 'World1',
    value: 1
  }, {
    name: 'World2',
    value: 2
  }, {
    name: 'World3',
    value: 3
  }, {
    name: 'World4',
    value: 4
  }, {
    name: 'World5',
    value: 5
  }, {
    name: 'World6',
    value: 6
  }, {
    name: 'World7',
    value: 7
  }, {
    name: 'World8',
    value: 8
  }];