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



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

如果我一次只使用一个表达式,它们都有效,但在一起却不起作用。

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

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

我看到的是,如果不是 do: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则不起作用。

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

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

但重要的是该函数正常工作,并且在项目中的多个位置使用。

谢谢

您可以尝试像下面的代码一样,它可以让你做你正在寻找的事情,也请检查这个 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
}];

相关内容

最新更新