首页 > 解决方案 > 在Angularjs中绑定布尔值

问题描述

我想将表达式绑定到 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" />

如果我执行后者,则表达式仅在控制器评估时评估一次。有没有办法做到这一点?

标签: angularjsbinding

解决方案


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

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

如果您在一个模板中需要很多次 - 那么$watch

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

但最好不要链接这样的观察者。


推荐阅读