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
}];
我有一个问题,在 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
}];