2013-10-02 13 views
7

Ho fatto un sacco di soluzioni, cercato e ricercato, ma non riesco a capire come raggiungere il mio obiettivo.Valutazione di un'espressione in un attributo di una direttiva in AngularJS

- Il problema:

  • Ho un la seguente situazione, voglio evitare che l'utente può commissioni sovrapposizione date in un contratto. Quando l'utente aggiunge una nuova commissione , viene mostrato un elenco con le Commissioni aggiunte generate con a ngRepeat, questo ha la difficoltà per l'utente di modificare le date. Nella parte dei contratti, questo non è un problema, perché per modificare un contratto , devi andare su altra schermata e modificarlo, le date non possono essere modificate nella stessa vista.

-Dove mi confondo:

  • Quando modifico una commissione che è stata aggiunta, devo confrontare con l'altro che ciò che ha aggiunto prima, quindi, voglio avere una lista , con tutte le date delle commissioni definite, e può dire nella direttiva, fatturando una funzione che restituisce una lista con tutte le date esclusa la data della commissione che sto modificando.

- Come spero risolverlo:

  • voglio fare qualcosa di simile:

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

e la funzione myFunction, sarà iterare su una lista che contiene tutti i dati delle commissioni aggiunte e la confronterà con tutti gli intervalli di date, tranne con la gamma contenuta in addedCom misionsDates [index].

L'obiettivo è possibile valutare un'espressione in un attributo senza utilizzare un ambito isolato.

ho avuto un sacco di problemi con gli ambiti isolati, e ho finito d'accordo con questo post:

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


EDIT che cercavo come è stato attuato ngRequire, perché ngRequire può accettare ng-richiedono = "aFunction()", ho raggiunto questo obiettivo nella mia direttiva, utilizzando $ parser. Quindi, Ora posso eseguire una funzione! Ho fatto qualche progresso con questo, ma voglio avere la conseguenza di eseguire la funzione nella mia direttiva, voglio raggiungere qualcosa di simile

rangesToEval = // il risultato della mia funzione o espressione.

Guardando le cose che hanno ngRepeat, io non riesco a capire in che ambito è il valore che restituiscono questa funzione

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

tutto funziona bene, perché sto utilizzando un valore booleano, ma, voglio usare un elenco che è il risultato di eseguire l'expresion nell'attributo NON sono compresi

// Questo ingresso è parte di un ng-repeat

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

Ho la funzione nella mia regolatore:

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

Quindi il mio prossimo obiettivo è possibile passare a:

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

Sarò distacco il progresso di questa ricerca.

sarò grato è qualcuno può aiutare o condividere qualsiasi idea

vediamo più tardi!

risposta

1

hai provato a passare questa funzione come il parametro "&" nella direttiva?

così:

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

})

Problemi correlati