【问题标题】:Returning data for service to controller in Angular在Angular中将服务数据返回给控制器
【发布时间】:2017-04-11 07:13:37
【问题描述】:

我需要通过提供输入日期从服务中检索输出数据。数据在服务上执行,但我无法将输出数据返回给控制器。我为code.link做了一个plunker 普朗克链接

【问题讨论】:

标签: angularjs return return-value


【解决方案1】:

你需要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;
});

您是否应该将.thencatch 移动到controller 取决于您reuse 该代码的多少。所以,在我知道细节之前不会对此发表评论。

working demo

【讨论】:

  • @R.Sharma 很高兴我能帮上忙! :)
【解决方案2】:

而不是从工厂获得承诺。从控制器中捕获它。只返回工厂内部的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

【讨论】:

    【解决方案3】:

    通过使用下面提到的代码,它将正常工作。请确保键与您的 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"
        }
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-02
      • 1970-01-01
      • 2016-09-04
      • 2023-03-11
      • 2015-11-15
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      相关资源
      最近更新 更多