2016-03-26 19 views
0

Bir takımda kaç oyuncunun hangi konumda olacağına karar vermek için kullanacağım oyuncular adlı bir yönergem var. Ben kaleci, savunma, orta alan için bunlardan 4, birine sahip ve ileri, bu yüzden şuna benzer (+ ve - Arttırma ve eksiltme butonları vardır) olabilir:

- Forwards: 2 + 
- Mid-Field: 4 + 
- Defence: 4 + 
- Goal Keeper: 1 + 

Ben artışı için doğrulamak 11'in üzerine çıkmadığından emin olun, ancak başka bir sınıftaki maxPlayers geçerliliğine nasıl erişebilirim?

require: any = '^ngModel'; 
    restrict: string = 'A'; 

    link: ng.IDirectiveLinkFn = (scope: any, 
     element: ng.IAugmentedJQuery, 
     attributes: any, 
     ngModel: ng.INgModelController) => { 

     scope.getTotalPlayers =(): number => { 
      return this.playerStateService.getTotalPlayers(); 
     }; 

     function customValidation(modelValue: number) { 
      var totalPlayers: number = scope.getTotalPlayers(); 

      if (totalPlayers > 11) { 
       ngModel.$render =() => { 
        ngModel.$setValidity('maxPlayers', false); 
       }; 
      } else { 
       ngModel.$setValidity('maxPlayers', true); 
      } 
      return modelValue; 
     } 
     ngModel.$parsers.push(customValidation); 

cevap

0

Neyi başarmak istiyorsunuz? Daha spesifik olarak, neden direktifin dışında kontrol eden oyuncu sayısını kullanıyorsunuz?

İki yol görüyorum.

  • Denetleyici işlevine gidin. denetleyicisinde denetleyicisinde $scope.myForm.myModelController.$parsers[0] gibi bir şeyler yazın.
  • Denetleyiciyi oluşturun veya oynatıcı sayısını kontrol etme işlevini kullanın. Daha sonra bu işlevi direktife aktarın. Yani, direktifin mantık doğrulamasını yapmak.

Örnekler:

İlk yolu.

function ExampleController($scope){ 
    var validityFunc = $scope.myForm.myModelController.$parsers[0]; 
} 

İkinci yolu. denetleyicisi

:

function customValidation(modelValue: number) { 
     ngModel.$setValidity('maxPlayers', !scope.validityFunc());. 
     return modelValue; 
    } 
ngModel.$parsers.push(customValidation); 
: direktifte

function ExampleController($scope){ 
    $scope.validityFunc = function(){ return totalPlayers>11;}; 
} 

İlgili konular