2016-01-03 15 views
6

Questo è un problema strano, che è un po 'difficile da generare ed esplorare.Problemi di ng-clic angolari su Safari con IOS 8.3

Mentre la costruzione di una web-app utilizzando angolare, il mio capo ha scoperto che tutti i pulsanti sul app che utilizzano ng-click direttiva non funzionano.

Ora, questo problema si verifica solo su iphone 6 with IOS 8.3 and using the safari browser.

Posso dire che quando è stato testato su iPhone5 (Tutte le versioni), iPhone 6 (IOS 9), Safari per Windows e tutti gli altri browser (Mobile e desktop), ng-click funziona come un fascino.

L'app viene creata utilizzando Angular 1.4.3.

Questo è il codice per il pulsante, come si può vedere, niente di speciale:

<button class="btn calculate-button" ng-click="onCalculate()">Calculate</button> 

E nel controller:

$scope.onCalculate = function() { 
    //Do something... And then: 
    $state.go('someplace'); 
}; 



ho provato molti cambiamenti che sono stati suggerito qui, tra cui ng-touch, ng-bind, la costruzione della mia propria direttiva click come segue:

.directive('basicClick', function($parse, $rootScope) { 
    return { 
     compile: function(elem, attr) { 
      var fn = $parse(attr.basicClick); 
      return function(scope, elem) { 
       elem.on('click', function(e) { 
        fn(scope, {$event: e}); 
        scope.$apply(); 
       }); 
      }; 
     } 
    }; 
}); 

Impossibile trovare una soluzione adeguata per il problema.

Grazie.

risposta

8

ho riparato alla fine.

Il problema era nella parte //Do something... And then: della funzione. Ad un certo punto lungo la strada, quella funzione salva alcuni dati nella memoria locale del browser.

Il mio capo utilizzava la navigazione privata in safari, e apparentemente quando si utilizza la navigazione privata su Safari, il browser non salva e i dati nella memoria locale e lancia un'eccezione e uccide il codice.

Bene, grazie in ogni modo.

19

IOS 8.4.1 L'aggiornamento presenta un problema noto che interrompe il funzionamento di ng-link e ng-click.

L'utilizzo di "touchstart click" può eventualmente risolvere questo problema.

app.directive("ngMobileClick", [function() { 
    return function (scope, elem, attrs) { 
     elem.bind("touchstart click", function (e) { 
      e.preventDefault(); 
      e.stopPropagation(); 

      scope.$apply(attrs["ngMobileClick"]); 
     }); 
    } 
}]) 

chiamata HTML: ng-mobile-click="onCalculate()"

+0

Grazie. Ci proverò appena posso e ti faccio sapere se ha funzionato. – Gal

+0

Trovato la soluzione. Non era quello. Grazie comunque! – Gal

+0

Questo ha funzionato per me, grazie. @Iamisti hai un link alla descrizione del problema noto o qualcosa del genere? –