AngularJS问题包含ng-click和2个表达式,只有一个触发

时间:2018-06-07 08:18:50

标签: angularjs angularjs-ng-click

我有一个问题,在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返回并且它可以工作,所以它也可能与我的函数有关,但同样,为什么它可以使用声明的bool而不是在视图中直接表达?

函数有点长,并调用其中的其他函数,所以出于我的问题的目的,我认为它不相关发布它并且制作小提琴也会很复杂,因为函数直接从API获取数据。

但重要的是该功能正常工作,并在项目的多个位置使用。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试下面的代码,它可以帮助您完成所需的操作,另请查看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
  }];