J'ai un template ci-dessous dans mon directive

<input ng-model="acc" type="number" required />
<p class="input-details" ng-class="{'has-error': confirm(acc, 3, 17)}"></p>

J'ai une méthode comme celle-ci dans ma fonction directive controller

$scope.confirm= function(value, min, max) {
  if (!value) return false;
  return ("" + value).length < min || ("" + value).length > max;
};

La valeur est toujours passée en tant que undefined dans ma méthode confirm, mais lorsque j'appelle la même méthode dans ng-change de mon entrée comme ci-dessous, elle est passée.

<input ng-model="acc" type="number" ng-change="confirm(acc,3,17)" required />

Pourquoi le ng-class n'obtient-il pas la bonne valeur ng-model?

0
Shane 8 août 2016 à 21:28

3 réponses

Meilleure réponse

(""+3).length = 1 || (""+17).length = 2 en raison de la conversion de type, voir codepen, par exemple, augmentez le nombre entré et voyez ce que ("" + acc) .length est égal et comment corriger https://codepen.io/anon/pen/vKQZoR

app.controller('classTesterCtrl', function($scope, $log){
  $scope.confirm= function(value, min, max) {
    if($scope.acc < 3 || $scope.acc  > 17){
      $scope.valid = false;
    } else {
      $scope.valid = true;
    }
  };
});


<div ng-app="modelTest">
  <div ng-controller="classTesterCtrl">
    <input ng-model="acc" type="number" ng-change="confirm()" required />
  <p class="input-details" ng-class="{'has-error': valid}"></p>
    {{(""+acc).length}}
    {{acc}}
    {{valid}}
  </div>
  </div>
1
asherrard 8 août 2016 à 19:01

Référencez la variable acc en utilisant $scope au lieu de l'injecter dans la fonction.

$scope.confirm = function(min, max) {
  if (!$scope.acc) return false;
  return ("" + $scope.acc).length < min || ("" + $scope.acc).length > max;
};
1
Dr. Cool 8 août 2016 à 18:42

Dans votre JavaScript, vous devriez avoir une possibilité d'accès. Utilisez également data-ng-model au lieu de ng-model.

1
Eduard Braun 8 août 2016 à 18:35