2015-05-27 20 views
40

Sto usando ng-disabled, mi piace. Funziona bene per me per input e pulsanti. Per il tag di ancoraggio non funziona. Come posso risolvere?AngularJS - ng-disabled non funzionante per il tag Anchor

HTML code

<a ng-disabled="addInviteesDisabled()">Add</a> 

JS code

$scope.addInviteesDisabled = function() { 
     return $scope.event.status === APP_CONSTANTS.STATUSES.PENDING_APPROVAL; 
    }; 
+0

Si consiglia di utilizzare ng-show. – Vineet

+7

Dovrei mostrare il tag di ancoraggio nello stato disabilitato @Vineet –

+0

http://stackoverflow.com/questions/13955667/disabled-href-tag – Vineet

risposta

56

non esiste un attributo disabilitato per i collegamenti ipertestuali. È possibile farlo:

.disabled { 
    cursor: not-allowed; 
} 

<a ng-click="disabled()" ng-class="{disabled: addInviteesDisabled()}">Add</a> 

$scope.disabled = function() { 
    if($scope.addInviteesDisabled) { return false;} 
} 
+9

Grazie per la tua risposta @JsIsAwesome. Modificato come '.disabled { cursore: predefinito; opacità: .5; } ' –

+1

@Donthamsettivbhadrarao +1 per l'opacità: .5' grazie. : D – CENT1PEDE

+0

Non dimenticare le virgolette attorno al nome della classe nella classe ng! ;) – Simon

18

è possibile creare una classe linkDisabled CSS, e applicarlo al vostro ancoraggio:

<style> 

.linkDisabled { 
    cursor: not-allowed; 
    pointer-events: none; 
    color: grey; 
} 

</style> 
+2

Potrebbe voler fare attenzione con questo dato che a partire da giugno 2016 la regola 'pointer-event' è supportata solo in 11+. Tutti gli altri browser sono ragionevolmente sicuri. [fonte] (https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events) –

+0

anche se questa soluzione è applicata, il link può essere cliccato con enter – user1751287

+0

errato. Il cursore non ha effetto lì con il puntatore-eventi nessuno – Metra

1

Questa domanda è stato risposto prima: Enable/Disable Anchor Tags using AngularJS

Usa una direttiva personalizzata o utilizzare un pulsante invece.

+2

Dovrei usare la direttiva personalizzata per questo? –

+0

Leggi il link che ho fornito: http://stackoverflow.com/questions/23425254/enable-disable-anchor-tag-using-angularjs – Komo

0

Quando ng-Disabled viene valutato su true, imposta l'attributo disabled sull'elemento che è generalmente un input o un altro controllo di modulo. I tag <a> non hanno attributi disabled quindi non verranno mai impostati. Prova a impostare lo ng-disabled sul tuo collegamento a true e vedrai tu stesso.

Forse questo aiuterà: ng-disabled And Anchor Tags Oh Noes!

+2

Sì, ho fatto riferimento a questo tutorial, prima di porre questa domanda @adamjld. Ma dovrei usare l'ancora invece del pulsante. –

-5

Utilizzare un disabile invece di ng-disabile

<a a-disabled="addInviteesDisabled()">Add</a> 
+3

Non funziona 'a-disabled' Umesh Kolapkar. Cos'è questo 'a-disabled'? Si prega di dare qualsiasi riferimento. –

+0

la sua direttiva personalizzata. Leggi questo link http://plnkr.co/edit/GkP1ukju4FWgBeprBLwj?p = preview –

+1

È necessario aggiornare la risposta per informare le persone che dovrebbero includere la direttiva personalizzata prima di incollare il codice per essa. C'è gente che si trova in modalità copia-pasta quando sta cercando una soluzione funzionante. ;) – jemiloii

0

Il modo migliore è quello di aggiungere la condizione disabilitata nella funzione dell'ancora. Pertanto, le funzioni vengono eseguite solo quando la condizione disabilitata viene controllata e superata.

$scope.next_kh_resource = function(){ 
    if ($scope.selected_kh_index < ($scope.selected_step.step_kh_resources.length -1)){ 
     var next = $scope.selected_kh_index + 1; 
     $scope.selected_kh_index = $scope.selected_kh_index +1; 
     $scope.selected_kh_resource = $scope.selected_step.step_kh_resources[next]; 
    } 
} 
$scope.prev_kh_resource = function(){ 
    if ($scope.selected_kh_index > 0){ 
     var prev = $scope.selected_kh_index -1; 
     $scope.selected_kh_index = prev; 
     $scope.selected_kh_resource = $scope.selected_step.step_kh_resources[prev]; 
    } 

} 

Nell'esempio precedente, mi disattivato le ancore impaginazione successive e prev inserendo la condizione disabilitata nelle funzioni. Gli utenti sono intelligenti. Presto impareranno che è la pagina finale e possono fare clic su Avanti ma non accadrà nulla

1

Sì amico possiamo disabilitare il tag di ancoraggio, vediamo cosa è necessario fare. L'ancoraggio è cliccabile, prima dobbiamo annullare il clic, possiamo farlo tramite gli eventi puntatore: nessuno; e poi per mostrare l'uso è disabilitato possiamo cambiare il colore su cui dobbiamo disabilitarlo come il colore: # 95979A ;. Dobbiamo ancora capire che cosa sta succedendo qui, aggiungendo quanto sopra non disabiliteremo l'evento click del tag di ancoraggio. Per fermarlo dobbiamo aggiungere ng-disabled che aggiungiamo l'evento attributo come disabeld = disabilitato, dobbiamo catturarlo usando [disabilitato].

codice in modo definitivo: un [disabili] {puntatore-eventi: none; color: # 95979A;} disabiliterà l'evento click del tag di ancoraggio.

Spero che questo abbia aiutato. Grazie

4

È possibile farlo tramite CSS, non sono necessarie direttive elaborate. Basta usare ng-class per applicare una classe un po 'come questo:

ng-classe:

ng-class="{disabledLink: disabledFunction()}" 

css:

.disabledLink { 
    color: #ccc; 
    pointer-events:none; 

} 

credito piena to

https://css-tricks.com/pointer-events-current-nav/

0

Ho avuto lo stesso problema facendo un pulsante di navigazione, questa soluzione era una buona soluzione per la mia p rogetto!

Fondamentalmente, ci sono due pulsanti (creati con tag di collegamenti) uno per il successivo e altro per il precedente. ci sono due variabili $scope, nextItem e prevItem, una per ogni pulsante. Quindi se non c'è il prossimo (o il precedente) il tag sarà stilizzato in modo corretto (quindi è disabilitato).

Quando nextItem non è nullo, il href saranno resi a href="/the-link/i-want-to-use" e quando è nullo, href sarà href="#".

0

Nessun attributo disabilitato nel tag di ancoraggio. Usato la classe "disabled" per il tag di ancoraggio.

$scope.data = {name:dinesh} 
<a ng-click="get_data()" ng-class="{disabled: data}">Add</a> 
Problemi correlati