无法从控制器传递已解析的参数

时间:2014-12-16 09:41:31

标签: jquery angularjs http http-post angularjs-ng-repeat

页面根本没有加载。我试图解决HTTP服务问题。

我的工厂:

app.factory("search", function($q, $http, $cookieStore){
return {
    getMessage: function(){
        //return $q.when("Response");
        console.log("Cookie --> ".$cookieStore.get("sId"));
        var promise = $http.post('tpl/processors/process-contacts.php', {sid : $cookieStore.get("sId")}).then(function(response) {              
            return response.data;               
        });
        return promise;
    }
   }
});

我所处理的状态:

  .state('app.mail.compose', {
            url: '/compose',
            templateUrl: 'tpl/mail_new.php',
            reloadOnSearch: true,
            resolve: {     
                searchVal: ['search',  function (search) {
                      return search.getMessage(); // not then
                }]
            }
        })

我的控制器:

 app.controller('SmsNewCtrl', ['$scope','$http','$cookieStore','$stateParams','searchVal',         function($scope, $http, $cookieStore,$stateParams,searchVal,transformRequestAsFormPost) {
$scope.sId = $cookieStore.get("sId");
//console.log("Inbox Type : "+ $stateParams.inboxType );
console.log("Cookie Call inside SmsNewCtrl: ",$cookieStore.get("sId"));


    $scope.contacts =  searchVal;
    console.log("Contacts from Search Factory :" + $scope.contacts);


    $scope.mail = {
      to: '',
      content: ''
    }

}]);

早些时候我曾经在我的控制器内进行http调用。直到然后一切正常,但页面首先加载,然后数据来了。所以我想通过在控制器外部进行http调用来解析数据。我是Angular的新手并且还在学习,如果我的方法有问题,请告诉我,或者让我知道在控制器外部进行http发布的最佳方法并解决。

2 个答案:

答案 0 :(得分:0)

您需要致电deferred.resolve(data)

var deferred = $q.defer();
var promise = $http.post('tpl/processors/process-contacts.php', {sid : $cookieStore.get("sId")}).then(function(response) { 
    deferred.resolve(response);
});
return deferred.promise;

然后在你的控制器中:

var promise = search.getMessage();
promise.then(function(data) {
    // do stuff
}, function() {
    console.log('An error occurred while processing the request.');
});

答案 1 :(得分:0)

我写了一个正在运行的快速示例: http://jsbin.com/nuzaqugofu/1/edit?html,js,console

按照我的方式尝试并继续添加越来越多的代码,直到它不再起作用。然后你就会知道是什么导致了这个问题。