2013-08-21 12 views
18

Ho un oggetto: model.dataCome disabilitare un pulsante in AngularJS se ci sono elementi in un array?

Come disabilitare un pulsante se questo oggetto ha una serie di domande e se tale array ha più di un elemento?

ho provato:

data-ng-disabled="model.questions.length > 0" 

Ma questo non sembra funzionare affatto.

+0

hai dimenticato 'ng-app'? –

+0

Ho una ng-app. L'altro poster rispetto alla risposta suggerisce che ho bisogno di creare una funzione. – Melina

+0

Il tuo codice mi sembra buono. Puoi creare un violino? Sicuramente non hai bisogno di una funzione per questo. – zsong

risposta

27

EDIT: Modifica risposta in risposta al post e commenti

Che dire:

data-ng-disabled="checkQuestions()" 

E poi nel controller:

$scope.checkQuestions = function() { 
if (model.questions.length > 1) { // your question said "more than one element" 
    return true; 
    } 
    else { 
    return false; 
    } 
}; 

cosa si tratta veramente basso è che ci sono più modi per realizzare questo compito; un'espressione, una funzione, una variabile legata (come dimostrato dalle varie risposte qui). Se nessuno di essi funziona, il problema potrebbe risiedere nella tua modella. Se potessi chiarire alcune incongruenze (vedi i miei commenti su come chiedere la struttura del tuo modello ... anche, ti interessa disabilitarlo se c'è qualcosa nell'array, o solo se c'è più di una cosa nell'array?), aiuterà a capirlo.

Ecco un violino che mostra tutti e tre gli approcci; vedrai che funzionano tutti. Confronta il controller con il violino e controlla se si avvicina.

http://jsfiddle.net/jlmcdonald/P8qjR/3/

+0

Okay, ora vedo, quindi ho bisogno di una funzione per fare il controllo – Melina

+0

Anche "ha una serie di domande" :-) Mi chiedo se sarebbe meglio per me farlo come una funzione con un parametro così io potrebbe usare questo in più di un posto.Qualsiasi idea perché AngularJS non includesse qualcosa come la possibilità di fare un conteggio piuttosto che dover chiamare una funzione? – Melina

+2

Non è necessario chiamare una funzione, sono consentite espressioni. questo più come un modo alternativo per realizzare la stessa cosa, per vedere quello che riporti come il suo successo.Se né l'espressione né la funzione funzionano, il problema risiede probabilmente nel tuo modello (vedi il mio commento sul tuo post di averci mostrato come è il tuo modello). – jlmcdonald

0

creare un modello di impostarne il valore predefinito false. Quindi cambia il suo valore in true, se la lunghezza dell'array non è vuota. Seguito con il collegamento del modello all'attributo ng-disabled del pulsante.

22

È sicuramente possibile utilizzare un'espressione anziché una funzione. Ma è possibile verificare se la matrice è undefined.

<button ng-disabled="model.questions != undefined && model.questions.length > 0"></button> 
2

ho potuto non ottengo @zsong risposta al lavoro e non volevo creare una funzione solo per restituire una lunghezza dell'array, così ho ottenuto che funziona con la creazione di un'altra variabile portata che ha restituito l'Array.length .

$scope.modelQuestionsLength = $scope.model.questions.length; 

ho potuto poi fare

<button ng-disabled="modelQuestionsLength > 0"></button> 
0

non ho potuto ottenere il modo di lavorare non definito, quindi se qualcun altro sta avendo difficoltà, questo ha funzionato per me:

<input ng-disabled="fieldsPermittedForEdit.indexOf('postDate') < 0"> 

In questo esempio, sto disabilitando il campo a meno che non esista postDate nell'array fieldsPermittedForEdit.

Problemi correlati