Il problema
Sto progettando un ibrido app Cordova utilizzando il (molto) nuovo AngularJS Material Design dependency.Utilizzare ingressi in AngularJS materiale di fondo fogli
Ho un modulo di accesso in un foglio di fondo chiamato tramite il servizio $mdBottomSheet
. Esempio di seguito:
$scope.showLogin = function ($event) {
$mdBottomSheet.show({
templateUrl: 'views/login/login.html',
controller: 'loginCtrl'
})
};
Il contenuto di views/login/login.html
sono: piste
<md-bottom-sheet ng-controller="loginCtrl" layout="column">
<form name="signInForm" ng-submit="submitPassword()">
<md-list>
<md-item>
<md-progress-circular md-mode="indeterminate" ng-show="loading"></md-progress-circular>
</md-item>
<md-item>
<md-text-float label="Email address" ng-model="username" required>
</md-text-float>
</md-item>
<md-item>
<md-text-float type="password" label="Password" ng-model="password" required>
</md-text-float>
</md-item>
<md-item>
<md-button class="md-primary md-raised submit" type="submit">Sign in</md-button>
</md-item>
</md-list>
</form>
</md-bottom-sheet>
Tutto e display più che bene.
TUTTAVIA! quando clicco sull'ingresso, il focus non viene mai assegnato all'input, e invece l'elemento md-bottom-sheet
viene trascinato avanti e indietro. Facendo clic sul pulsante (quando non disabilitato) si attiva bene, ma il clic sull'input per assegnargli il focus non viene mai riconosciuto.
Le cose che ho provato
- Aggiunta
ng-click="return false"
, 'ng-click = "$ event.preventDefault()" ` - Aggiunta di una regola
-webkit-transform: translate3d(0, 80px, 0) !important;
al CSS , poiché questo è lo stato predefinito della proprietà che viene modificato durante il trascinamento. - Aggiunta
angular.element('md-bottom-sheet').on('click', function() { return false; });
a un bloccong-init
. - Come sopra (utilizzando jQuery per provare a eseguire questa operazione) sull'evento
dragstart
.
La domanda
Come posso utilizzare un ingresso in un lenzuolo di sotto con un design materiale, dato che ho provato ogni soluzione che conosco per ottenere questo a lavorare per toccare?
Avvertenze
1. Mi piacerebbe offrire un esempio vivo per questo, ma non riesco a trovare una fonte CDN per angular/material
2. Questo accade solo su un dispositivo mobile, nessuna idea se accadrà su un sito web mobile, come ho provato solo in un ibrido app Cordova
3. Non ci sono esempi di questo che ho trovato via ricerca, quindi non posso nemmeno indicarti una risorsa che potrebbe emulare il problema.
4. Fondamentalmente, questo sarà molto difficile da riprodurre.
Aggiornamento
Una possibile soluzione Ho identificato:
Il seguente blocco nella "classe" function BottomSheet(element)
per il provider ha la seguente:
function onTouchStart(e) {
e.preventDefault();
/* do the rest of the code */
}
Modifica che non consente il normale comportamento di input, ma richiede es che bendo il loro repo.
if (e.target.tagName.toLowerCase() !== 'input')
e.preventDefault()
C'è una soluzione che non mi richiede di sborsare questo per un cambiamento così piccolo?
Per i futuri lettori, la direttiva funziona, ma non importa se è 'preventDefault' o' stopPropagation'. –