我有一个问题,在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获取数据。
但重要的是该功能正常工作,并在项目的多个位置使用。
谢谢
答案 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
}];