2017-04-11 55 views
0

我需要通过提供输入日期来检索服务中的输出数据。数据在服务上执行,但我无法将输出数据返回给控制器。我做了一个代码的链接。链接是 Plaunker链接在Angular中返回服务控制器的数据

+0

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

+0

着增加与问题 –

回答

3

您需要return$http.get和内部.then最终修改变量,说obj

像这样:

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; 
}) 

而且,因为它返回的承诺,在控制器,你需要将其更改为:

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

无论你应该将你的.thencatchcontroller或不应该取决于你有多少代码reuse。所以,直到我知道细节之后才会对此发表评论。

working demo

+0

感谢Tanmay ..这是我的工作.. –

+0

@ R.Sharma高兴我可以帮忙! :) – tanmay

1

而不是从工厂捕捉承诺。从控制器捕捉它。只在工厂内返回http。

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

使用下面提及的代码将正常工作。请确保按照您的json匹配键。

控制器代码:

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" 
    } 
    ] 
} 
相关问题