2013-10-02 14 views
7

Zrobiłem dużo obejścia, przeszukano i przeszukano, ale nie mogę wymyślić, jak osiągnąć mój cel.Ocena wyrażenia w atrybucie dyrektywy w AngularJS

- Problem:

  • Mam następującą sytuację chcę uniknąć użytkownikowi prowizji nakładania mogą daty w umowie. Gdy użytkownik doda nową prowizję , wyświetlimy listę z dodanymi prowizjami wygenerowanymi za pomocą a ngRepeat, ma to trudności z możliwością edycji dat przez użytkownika. W części umów nie stanowi to problemu, ponieważ aby edytować umowę , musisz przejść do innego ekranu i edytować go, daty nie mogą być zmienione w tym samym widoku co .

Gdzie ja się mylić:

  • Kiedy edytować prowizję, która została dodana, muszę porównać go z innymi, że co dodawać przed, więc chcę mieć listę , ze wszystkimi datami zdefiniowanych prowizji i można powiedzieć w dyrektywie fakturowanie funkcji, która zwraca listę z wszystkimi datami bez daty prowizji, którą edytuję.

- Jak mam nadzieję rozwiązać go:

  • chcę zrobić coś takiego:

<input type="text" name="newComission_dateFrom" ng-model="newCommission.from" notincluded=myFunction({{$index}})/>

i myFunction funkcyjnego będzie iterować listę która zawiera wszystkie dodaneDaty wysyłek i porówna je ze wszystkimi zakresami dat, z wyjątkiem zakresu zawartego w dodanymCom misionsDates [indeks].

Celem jest ocena wyrażenia w atrybucie bez użycia izolowanego zakresu.

miałem wiele problemów z pojedynczych zakresów, a skończyłem zgadzając się z tym poście:

When writing a directive, how do I decide if a need no new scope, a new child scope, or a new isolate scope?.


EDIT szukałem jak został wdrożony ngRequire, ponieważ ngRequire może zaakceptować NG-wymagać = "aFunction()", dotarłem ten cel w moim dyrektywy, używając $ parser. Więc, Mogę teraz wykonać funkcję! Zrobiłem postępy, korzystając z tego, ale chcę mieć wynik wykonania funkcji w mojej dyrektywie, chcę osiągnąć coś takiego:

rangesToEval = // wynik mojej funkcji lub wyrażenia.

Szukam rzeczy, które ngRepeat, nie mogę się zorientować, w jakim zakresie jest wartość, która powrotu Ta funkcja

if(attrs.notincluded) { 
      var notIncludedValidator = function(value) { 
      ngModelCtrl.$setValidity('notincluded', !attrs.notincluded); 
      return value; 
     }; 
    } 

wszystko działa dobrze, bo używam wartość logiczną, ale chcę używać to lista jest wynikiem wykonania wprowadzić wyrażenie w atrybucie notincluded

// to wejście jest częścią nG-repeat

<input type="text" ng-model="commission.date" ng-required="true" notincluded="filterDatesFn({{$index}})" /> 

Mam funkcję w moim kontrolera:

$scope.filterDatesFn = function(index) { 
     // in this list, we will add the dates of the defined commissions 
     if($scope.addedCommisionsDate) { 
      var listToEvalue= []; 
      for (var i = 0; i < $scope.addedCommisionsDate.length; i++) { 
       if(i != index) { 
        listToEvalue.push($scope.addedCommisionsDate[i]); 
       } 
      } 
      return listToEvalue; 
     } 
    }; 

Więc moim następnym celem jest może zmienić:

if(attrs.notincluded) { 
      var notIncludedValidator = function(value) { 
      --put the listToEvalue here and do my comparations and validate or invalidate the form in base of the comparation That I do here. 
      return value; 
     }; 
    } 

będę delegowania postępu badań.

będę wdzięczny jest ktoś może pomóc lub udostępnić jakiś pomysł

zobaczenia później!

Odpowiedz

1

Czy próbowałeś przekazać tę funkcję jako parametr "&" w swojej dyrektywie?

tak:

App.directive('myDirective', function(){ 
return { 
    scope: { 
     myFc: '&'//if the name of parameter is the same in html if not use '&nameOfParameter' 
    }, 

    link: function($scope, $el, $attr){ 
     $el.bind('click', function(value){ 
      $scope.myFc(value) 
     }) 
    } 
} 

})

Powiązane problemy