2017-04-11 2 views
0

J'ai besoin de récupérer les données de sortie d'un service en fournissant une date d'entrée. les données sont exécutées sur le service, mais je suis incapable de renvoyer les données de sortie au contrôleur. J'ai fait un plunker pour code.link est Plaunker LinkRenvoi des données pour le service au contrôleur dans Angular

+0

https://plnkr.co/edit/4Uho7njMAXryTDOfwcLP?p=preview –

+0

ne peux pas ajouter à la question –

Répondre

3

Vous devez return votre $http.get et à l'intérieur .then votre variable modifiée finale, dites obj.

Comme ceci:

return $http({ 
    url: 'miqaat.json', 
    method: 'GET', 
}) 
.then(function(response) { 

    var all_miqaats = response.data.response; 
    var obj = all_miqaats.find(function(v) { 
     return v.miqaat_date == dat 
    }); 

    if (obj == undefined || obj == "") { 
     console.log("obj = "); 
     console.log(obj); 
     obj.isHoliday = "100"; 
     // return obj; 
    } else { 
     obj.mq_title = obj.title; 
     obj.isHoliday = "101"; 
     // return obj; 
     console.log("Data from Service"); 
     console.log(obj); 
    } 

    return obj; 
}) 

Et, puisque cela renvoie la promesse, dans le contrôleur vous devez changer pour:

getMiqaat.findMiqaat($scope.date).then(function(res) { 
    $scope.miqaat = res; 
}); 

Si vous devez déplacer votre à controller ou non .then et catch devrait dépendre de combien vous reuse ce code. Donc, je ne ferais aucun commentaire à ce sujet avant de connaître les détails.

working demo

+0

Merci Tanmay .. C'est un travail pour moi .. –

+0

@ R.Sharma heureux Je pourrais aider! :) – tanmay

1

au lieu de saisir la promesse de l'usine. Attrapez-le du contrôleur. seulement retourner le http dans l'usine.

app.controller('myCtrl', function($scope, getMiqaat) { 
    $scope.date = "2017-04-11"; 
    getMiqaat.findMiqaat($scope.date) 
     .then(function(response) { 
      var all_miqaats = response.data.response; 
      var obj = all_miqaats.find(function(v) { 
       return v.miqaat_date == $scope.date 
      }); 
      if (obj == undefined || obj == "") { 
       console.log("obj = "); 
       console.log(obj); 
       obj.isHoliday = "100"; 
       $scope.miqaat = obj; 
      } else { 
       obj.mq_title = obj.title; 
       obj.isHoliday = "101"; 
       $scope.miqaat = obj; 
       console.log("Data from Service"); 
       console.log(obj); 
      } 
     }) 
     .catch(function(response) { 
      response.response = "Internal Server Error!"; 
     });; 
}); 
app.factory('getMiqaat', function($http) { 
    return { 
     findMiqaat: function(date) { 
      var dat = date; 
      console.log(dat); 
      return $http({ 
       url: 'miqaat.json', 
       method: 'GET', 
      }) 
     } 
    }; 
}) 

Demo

0

En utilisant le code ci-dessous mention il travaillera bien. S'il vous plaît assurez-vous que les clés correspondent à votre json.

Code du contrôleur:

var app = angular.module("myApp", []); 

app.controller('myCtrl', function($scope, getMiqaat){ 
    $scope.date = "2017-04-11"; 
    console.log("date ::"+$scope.date); 
    $scope.status; 
    $scope.miqaat; 
    getMiqaatData(); 
    function getMiqaatData() { 
     getMiqaat.findMiqaat($scope.date) 
      .then(function (response) { 
       $scope.miqaat = response.data.response[0]; 
      }, function (error) { 
       $scope.status = 'Unable to load data: ' + error.message; 
      }); 
    } 

}); 

app.service('getMiqaat', function($http){ 

      this.findMiqaat = function(date){ 
       var dat = date; 
       console.log(dat); 
       return $http({ 
        url: 'miqaat.json', 
        method: 'GET', 
       }); 
       } 

}) 

Json : 

{ 
    "status":true, 
    "message":"List of the miqaats", 
    "response":[ 
    {"miqaat_date":"2017-04-11", 
     "mq_title":" New Year", 
     "isHoliday" :"101" 
    }, 
    {"miqaat_date":"2017-04-09", 
     "mq_title":"Some Fest", 
     "isHoliday" :"101" 
    } 
    ] 
}