在Angularjs中绑定布尔值

时间:2018-09-18 09:50:33

标签: angularjs binding

我想将表达式绑定到ng-disabled或ng-class属性,并在属性更改时重新评估它。如果我在html中有表达式,那么所有方法都可以工作,但可读性却很差:

<div ng-class="{disabled: $ctrl.form.$valid && $ctrl.foo && $ctrl.bar && $ctrl.goo }" >
  bla bla bla
</div>
<button ng-disabled="$ctrl.form.$valid && $ctrl.foo && $ctrl.bar && $ctrl.goo" />

我希望在类定义中具有一个属性:

this.isValid = this.form.$valid && this.foo && this.bar && this.goo;

并像这样绑定到该属性:

<div ng-class="$ctrl.isValid" >
  bla bla bla
</div>
<button ng-disabled="$ctrl.isValid" />

如果我执行后者,则当控制器求值时,表达式仅求值一次。有办法吗?

1 个答案:

答案 0 :(得分:1)

如果您将它放在一个地方并且表达真的很奇怪,我建议您使用方法:

<button ng-disabled="$ctrl.isValid()" />

如果您需要在一个模板中进行多次操作-那么$watch

var vm = this;
$scope.$watch('$ctrl.form.$valid && $ctrl.foo && $ctrl.bar && $ctrl.goo', (val) => {
  vm.isValid = val;
});

但是最好不要将这样的观察者链接起来。