无法获取角度为

时间:2015-05-21 15:00:16

标签: javascript angularjs service scope

我无法从服务产生的对象中填充我的范围变量。

这是我的服务:



app.factory("studentService", ['$http','$q','$localstorage','$state', 
    function($http,$q,$localstorage,$state) {

 return{
    getPersonalInfo:function(pi_id)
            {
                    return $http.get(app.baseUrlServer + app.baseUrlUser +   '/getpersonalinfo/' + pi_id)
                    .then(function(response){
                        if (response.data) {
                        
                            return response.data;
                        } else {
                            // invalid response
                            return $q.reject(response.data);
                        }
                    },function(response){
                        // invalid response
                        return $q.reject(response.data);
                    });
            }
   }
 
 /* my controller */
 var app_ctrl = angular.module('app.controllers');
app_ctrl.controller('MatesprofileController', 
	['$scope','$stateParams','studentService','$localstorage',
	function($scope, $stateParams, studentService , $localstorage) {
      
      $scope.personalInfo=[];
    
    studentService.getPersonalInfo($stateParams.pi_id).then(function(data){
	    	
	    	$scope.personalInfo.push(data);
	    	   
  		 }); 
  
    
    }




即使我已经将数据对象推送到personalInfo数组中,我也无法填充$ scope.personalInfo数组。

实际上,当我在.then函数内部的console.log(数据)时,它会输出数据,但是当我这样做时,就在.then块之外,它什么都没显示..

请帮助我。我完全坚持这个

更新

我做了以下事情:



app.factory("studentService", ['$http', '$q', '$localstorage', '$state',
      function($http, $q, $localstorage, $state) {


        return {
          getPersonalInfo: function(pi_id) {
            var defer = $q.defer();

            $http.get(app.baseUrlServer + app.baseUrlUser + '/getpersonalinfo/' + pi_id)
              .then(function(response) {
                if (response.data) {
                  defer.resolve(response.data);
                } else {
                  // invalid response
                  defer.reject(response.data);
                }
              }, function(response) {
                // invalid response
                defer.reject("Error");
              });
            return defer.promise;

          }

        }

      }


      /* CONTROLLER */

      var app_ctrl = angular.module('app.controllers');
      app_ctrl.controller('MatesprofileController', ['$scope', '$stateParams', 'studentService', '$localstorage',
          function($scope, $stateParams, studentService, $localstorage) {

            //$scope.personalInfo=[];
            studentService.getPersonalInfo($stateParams.pi_id).then(function(data) {
              $scope.data = data;
              console.log($scope.data); //this shows up correctly, but it executed latest

            });

            console.log($scope.data); // this shows up first in the console, but it's empty
          }




仍然没有工作:(

更新

最后,我通过简单地不使用then()函数来实现它。因为服务返回实际数据而不是promise,因此,在控制器上只需要将其作为变量调用。

示例:

$ scope.data = studentService.getPersonalInfo($ stateParams.pi_id);

瞧瞧!感谢那些帮助我的人,特别感谢我的朋友@arwaniali建议我这个解决方案以及所有回答过这个问题的人。谢谢:))

2 个答案:

答案 0 :(得分:1)

您的Clients.All.testing(msg); 与其返回的内容不一致。如果http调用成功并且您获得数据,则返回实际数据而不是promise。如果您希望函数始终返回一个promise,那么您应该通过以下方式更改getPersonalInfo

getPersonalInfo

答案 1 :(得分:0)

$ http服务返回一个promise。您应该将此承诺返回给控制器,然后测试返回数据并在必要时执行相应的错误处理。

 app.controller('MatesprofileController', ['$scope','studentService', function($scope,  studentService ) {
   $scope.personalInfo=[];
      studentService.getPersonalInfo(123).then(function(data){
        if(data !== undefined && data.length > 0)
          $scope.personalInfo = data;
        else
          console.log('handle error');


        console.log($scope.personalInfo);
      });
 }]);

http://plnkr.co/edit/ZzNBT6pDqhqcAseWVX5I?p=preview