2017-07-25 2 views
0

Je travaille sur l'application angularjs. J'ai un bouton dans ma page d'accueil, lorsque l'utilisateur clique sur le bouton, il doit frapper le contrôleur et à partir du backend obtenir les données et afficher sur le navigateur. Tout fonctionne bien en chrome et firefox mais ne fonctionne pas dans IE. Essayé de trouver une solution de rechange à résoudre, mais sans succès, toute suggestion serait utile.alternative au bouton ng-click dans angularjs

html: Connexion

spring controller: 

@RequestMapping(value = "/getData", method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE) 
    public @ResponseBody 
    List<String> getMyData(HttpServletRequest request) throws Exception { 
     System.out.println("In MyDataController"); //printed only when navigated through chrome 
    //logic here 
    //return statement 
} 

PS: Lorsque le même code ci-dessus est exécuté dans IE11, il ne frappe pas le contrôleur de printemps, mais fonctionne très bien est en chrome et safari. Quel pourrait être l'autre moyen d'obtenir la même fonctionnalité que le bouton dans angularjs et qui fonctionne à la fois dans IE et chrome.

--EDITED-- contrôleur js:

myApp.controller('myController', function ($scope, MyService) { 
    $scope.btnAdminDetails= function() { 
    alert("In btnAdminDetails, js controller"); //this is called both in IE11 and chrome 
    console.log("In controller"); 
    MyService.retrieveData().then(
    function (response) { 
     alert("response back from spring controller"); 
     if(window.navigator.msSaveOrOpenBlob){ 
     $scope.IEBrowser = true; 
     $scope.myData = response; 
     } else { 
     $scope.IEBrowser = false; 
     $scope.myData = response; 
     } 
    }, 
    function (errResponse) { 
     $rootScope.showError("Internal error" + errResponse); 
    }); 
    } 
    $scope.btnAdminDetails(); 
    }); 
    //service code 
    _myService.retrieveData= function(){ 
    alert("service call");//called when tested from both IE and chrome, but issue is from IE the java controller is not getting called from here.. 
    console.log("In Angular Service above $q.defer ");    
    var deferred = $q.defer(); 
    console.log("In Angular Service below $q.defer"); 
    var randomh=Math.random(); 
    var repUrl = myAppURL+'/myControllerr/getData.form?x='+randomh+""; 
    $http.get(repUrl).then(
    function (response) { 
     deferred.resolve(response.data); 
    }, 
    function(errResponse){ 
     deferred.reject(errResponse); 
    } 
    ); 
    return deferred.promise; 
    } 
I have added Math.random to the request URL in the service call. 

En IE11, lorsque je clique sur le bouton que l'alerte btnAdminDetail, js controller dans le contrôleur est affiché, les autres déclarations d'alerte ou les déclarations sont CONSOLE.LOG pas imprimé.

+1

pouvez-vous me dire que c'est sur le clic du bouton, la fonction btnAdminDetails est en cours d'exécution? ou pas? –

+0

oui il est en cours d'exécution et en appelant le contrôleur angulaire aussi, question est qu'il ne frappe pas le contrôleur de ressort. – user7833845

+1

Veuillez également nous indiquer votre code MyService. –

Répondre

-1

il n'y a pas de remplacement de ngClick mais vous pouvez également utiliser ngDblClick en place de ngClick pour plus de détails s'il vous plaît consulter ce lien:

https://docs.angularjs.org/api/ng/directive/ngClick

+0

Mon problème n'est pas une alternative mais devrait fonctionner dans IE et évidemment je ne peux pas utiliser ngDblClick comme je ne peux pas dire à l'utilisateur de double-cliquer pour obtenir une fonctionnalité au lieu d'un clic bouton. Toutes les suggestions pour mon poste ci-dessus seraient utiles. @ Mayank Sharma – user7833845

0

Ajouter de la valeur à l'intérieur balise button

<div ng-controller="myController"> 
    <button type="submit" class="btn btn-default" value="login" ng- 
    click="btnAdminDetails()"> 
     Login 
    </button> 
</div> 
+0

J'ai déjà essayé d'ajouter cela, mais pas de chance. Je suis en train d'éditer mon post avec ma dernière version essayée maintenant. S'il vous plaît jeter un oeil – user7833845

+0

Quelle est la version d'IE que vous utilisez –

+0

IE11 est la version et aucune erreur ne s'affiche dans la console. @Vikash Kumar – user7833845

0

Je pense que votre application ne fonctionne pas dans IE11 .Puis faire les changements suivants.

1.Add la ligne suivante dans la balise head

<meta http-equiv="X-UA-Compatible" content="IE=11" /> 

2.Utiliser mode strict pour vos contrôleurs

(function() { 
    "use strict"; 

    function yourController($scope, $rootScope) { 
     // Do things 
    } 

}()); 

3.Changez le fichier web.config par rapport à IE11

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <clear /> 
     <add name="X-UA-Compatible" value="IE=11" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer> 
</configuration>