简体   繁体   中英

Using AngularJS $filter with ng-disabled

I've got an object in my $scope that contains a bunch of details about, say, an election. This object includes a voters array of objects, each with an _id :

$scope.election = {
  voters: [
    { _id: '123' },
    { _id: '456' },
    { _id: '789' }
  ]
}

Also in my scope I have details about the currently logged in user:

$scope.user = { _id: '456' }

How can I bind ng-disabled to the presence of $scope.user._id in the array of objects $scope.voters ?

What I've Tried

I have success simply displaying the presence of $scope.user._id in $scope.election.voters like this (Jade syntax):

pre(ng-bind="election.voters | filter:{user._id} | json")

When the current user is among the voters , they get displayed. When they're not among the voters, I get an empty array. That seems quite close to what I want.

But using the same filter (sans | json ) with ng-disabled, I get the Angular Infinite $digest loop error.

Is this situation too complicated? Should I move it to a $filter ? If so, how would I go about making it generic enough to be useful in a number of situations (if that's even feasible)?

Can run a simple filter right in controller, or using app.filter('filterName', func...) create a custom filter you can use in markup

$scope.userIsVoter = function() {
        return $scope.election.voters.filter(function(el) {
          return el._id == $scope.user._id;
        }).length
      }
<button ng-disabled="userIsVoter()">Do Something</button>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM