2016-03-26 10 views
0

チームのどのポジションに何人のプレイヤーがいるかを決定するために使用するplayerというディレクティブがあります。

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

私は増分を検証: - それは、このようなものに見える(インクリメントとデクリメントボタンで+をして)かもしれないので、私は、これらの4、ゴールキーパー、防衛、ミッドフィールドのための1つを持っていると転送しますそれが11を超えていないことを確認しますが、他のクラスのmaxPlayersの有効性にどのようにアクセスできますか?

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); 

答えて

0

何を達成したいですか?具体的には、ディレクティブの外側でチェックインしているプレーヤーの数をなぜ機能させるのですか?

2つの方法があります。

  • コントローラ機能へのアクセス。 コントローラには、$scope.myForm.myModelController.$parsers[0]のようなものを書いてください。
  • コントローラを作成するか、プレーヤーのチェック機能の数をサービスしてください。次に、この関数を指令に転送します。つまり、指令の論理検証を行う。

例:

最初の方法

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

第二の方法。コントローラで

:ディレクティブで

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

function customValidation(modelValue: number) { 
     ngModel.$setValidity('maxPlayers', !scope.validityFunc());. 
     return modelValue; 
    } 
ngModel.$parsers.push(customValidation); 
関連する問題