2013-05-30 14 views
7

mam ten element:

<input type="text" name="azurerepo" 
    ng-model="item.azurerepo" 
    ng-class="{error: myForm.azurerepo.$invalid}" 
    ng-required="item.deploymentType=='azure'" 
    ui-event="{ blur : 'azureCallback()' }" /> 

Wywołanie zwrotne służy:

$scope.myForm.azurerepo.$setValidity('azurerepo',false); 

Gdybym wpisać dane i wyjdzie na wejściu to odróżnia ją nieprawidłowy.

Jeśli wrócę do wejścia, cofnij wszystkie wprowadzone dane, a następnie wpisz coś, co jest nadal nieprawidłowe! Spodziewam się, że jest to ważne teraz, ponieważ dane zostały wpisane w.

Odpowiedz

8

nie wiem, dlaczego postanowił wykorzystać kątową-ui zamiast tworzyć proste dyrektywy, niemniej jednak przypuszczam, że to możliwe, aby dodać keyup wydarzenie do dyrektywy ui-event i wywołać funkcję, aby ustawić ważność true tutaj.

ale wolałbym polecam keep it simple z dyrektywą niestandardowe:

yourApp.directive('checker', function() { 
    return { 
    restrict: 'A', 
    scope: { 
     checkValidity: '=checkValidity' // isolate directive's scope and inherit only checking function from parent's one 
    }, 
    require: 'ngModel', // controller to be passed into directive linking function 
    link: function (scope, elem, attr, ctrl) { 
     var yourFieldName = elem.attr('name'); 

     // check validity on field blur 
     elem.bind('blur', function() { 
      scope.checkValidity(elem.val(), function (res) { 
       if (res.valid) { 
        ctrl.$setValidity(yourFieldName, true); 
       } else { 
        ctrl.$setValidity(yourFieldName, false); 
       } 
      }); 
     }); 

     // set "valid" by default on typing 
     elem.bind('keyup', function() { 
      ctrl.$setValidity(yourFieldName, true); 
     }); 
    } 
    }; 
}); 

a elementem:

<input name="yourFieldName" checker="scope.checkValidity" ng-model="model.name" ng-required=... etc> 

i sprawdzania regulatora sama:

function YourFormController ($scope, $http) { 
    ... 
    $scope.checkValidity = function (fieldValue, callback) { 
     $http.post('/yourUrl', { data: fieldValue }).success(function (res) { 
      return callback(res); 
     }); 
    }; 
    ... 
} 
+1

I m za pomocą wywołania zwrotnego zrobić post HTTP http, aby sprawdzić ważność na serwerze – Jon

+0

jest w porządku, Twoja funkcja checkValidity insid e kontroler wysyła żądanie HTTP, a następnie zwraca wywołanie zwrotne z odpowiedzią, która jest bardzo przydatna dla dyrektywy – Kosmetika

+0

Co powinna zwrócić funkcja kontrolera. Jak to wygląda? Dzięki za pomoc! – Jon

Powiązane problemy