2013-10-02 12 views
7

Ich habe eine Menge Workaround, gesucht und recherchiert, aber ich kann mir nicht vorstellen, wie ich mein Ziel erreichen kann.Bewertung eines Ausdrucks in einem Attribut einer Direktive in AngularJS

- Das Problem:

  • Ich habe die folgende Situation, ich möchte, kann der Benutzer vermeiden Überlappung Kommissionen Termine in einem Vertrag. Wenn der Benutzer eine neue Kommission hinzufügen, zeigen wir eine Liste mit den hinzugefügten Provisionen, die mit ein ngRepeat generiert wurden, dies hat die Schwierigkeit des Benutzers, die Daten zu bearbeiten. Im Teil der Verträge ist dies kein Problem, denn zum Bearbeiten eines Vertrags müssen Sie zu einem anderen Bildschirm gehen und ihn bearbeiten, die Daten können nicht in derselben Ansicht geändert werden.

-Wo ich verwirren:

  • Wenn ich einen Auftrag bearbeiten, die hinzugefügt wurde, muss ich es vergleichen mit dem anderen das, was vor hinzugefügt, so, ich möchte eine Liste haben , mit allen Daten der Provisionen definiert, und kann in der Direktive sagen, eine Funktion, die eine Liste mit allen Daten ohne das Datum der Kommission, die ich gerade bearbeite.

- Wie ich hoffe, dass es lösen:

  • ich so etwas wie dies tun wollen:

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

und die Funktion myFunction, wird eine Liste iterieren Diese enthält alle addiertenCommissionsDates und vergleicht sie mit allen Datumsbereichen, außer mit dem in addedCom enthaltenen Bereich misionsDates [index].

Das Ziel ist können einen Ausdruck in einem Attribut ohne Verwendung eines isolierten Bereichs auswerten.

hatte ich viele Probleme mit isolierten Bereichen, und ich mit diesem Beitrag fertig Vereinbarung:

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


EDIT Ich war auf der Suche, wie wurde ngRequire umgesetzt, weil ngRequire akzeptieren ng-erfordern = "aFunction()", ich dieses Ziel in meiner Richtlinie erreicht, $ Parser verwenden. So, kann ich jetzt eine Funktion ausführen! Ich habe einige Fortschritte dabei, aber ich möchte das Ergebnis der Ausführung der Funktion in meiner Direktive haben, möchte ich so etwas erreichen

rangeToEval = // das Ergebnis meiner Funktion oder Ausdruck.

die Dinge suchen, das ngRepeat haben, kann ich heraus nicht in welchem ​​Umfang ist der Wert, der diese Funktion

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

alles funktioniert gut, weil ich einen boolean bin mit, aber ich verwenden möchte eine Liste, die das Ergebnis führen die expresion in dem Attribut ist notincluded

// Dieser Eingangsteil eines ng-repeat

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

Ich habe die Funktion in meinem Controller:

$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; 
     } 
    }; 

Also mein nächstes Ziel ist ändern können:

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

Ich werde den Fortschritt der Forschung sein Posting.

werde ich dankbar sein, ist jemand eine Idee helfen oder teilen können

Bis später!

Antwort

1

haben Sie versucht, diese Funktion wie '&' Parameter in Ihrer Direktive zu übergeben?

wie folgt aus:

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

})

Verwandte Themen