2014-11-19 4 views
0

해결에서 데이터 목록을 반환하려고하고 나서 내 컨트롤러의 해당 목록에 액세스하려고합니다. Resolve는 컨트롤러가로드되기 전에 실행되는 것으로 가정되지만 그 반대입니다.resolve from

dbdata.getlist은 목록을 반환하는 $ http.get을 사용하는 API 호출입니다.


angular.module('amebaTvApp') 
    .controller('MainCtrl', ['$scope', 
    function ($scope,listdata) { 
     $scope.list = listdata; 
... 
    }]); 

$routeProvider 
    .when('/main', { 
     templateUrl: 'views/main.html', 
     resolve : { 
      listdata: ['$q','dbdata',function ($q,dbdata) { 
       dbdata.getlist(function(data){ 
        return data; 
       }); 
      }] 
     }, 
     controller: 'MainCtrl' 
    }) 

.... 
} 

제안 편집은 :

나는

listdata: ['$q','dbdata',function ($q,dbdata) { 
       var deferred = $q.defer(); 
       dbdata.getFeatures(function(data){ 
        deferred.resolve(data); 
       }); 
       return deferred.promise; 
      }] 

아래의 코드를하려고 할 때 가 '다음'정의되지 않은의 속성을 읽을 수 없습니다 얻을 .. ..

listdata.then(function(data) { 
      $scope.list = data; 
     }); 

lisdata이 정의되지 않은 것 같다 때이 오류가 발생 된 이유 컨트롤러로드 : $의 route.current : 내가 지금처럼되는 listData에 액세스하는 경우 가 정의되지 않은

의 '다음'속성을 읽을 수 없습니다. locals.listdata 그러면 작동합니다.

+0

확인 약속 ... listdata.then ( 기능 (데이터) { $ scope.list = 데이터; }) – Asik

+0

@Asik 나는 '다음'기능 때문에 목록을 반환하고있어 적용 할 수 없습니다 그것에. – Fabii

+0

@Fabii 당신의 콜백 함수 **에서 ** 귀하의 해결 함수에서 ** 목록을 반환합니다. '해결'의 개념은 약속을 되 찾는 것이고, 약속이 해결되면 경로가 변경되어 약속의 값을 새로운 컨트롤러에 주입 할 수 있습니다. – Brocco

답변

0

$ route.current.locals.listdata를 통해 목록 데이터를 액세스하는 것이 트릭을 완료 한 것으로 보입니다. 이것이 올바른 방법인지 여부는 내가 너무 확신하지 못합니다. 어떤 의견이라도 좋을 것입니다. 컨트롤러