문제

내 앱에는 다음을 사용하여 서버에서 다양한 리소스를 가져오는 상태가 있습니다. resolve 절.

나는 또한 글로벌 이러한 리소스에 액세스해야 하는 컨트롤러입니다.예를 들어, 이러한 리소스의 일부 데이터를 표시해야 하는 탐색경로를 생각해 보세요.

전역 컨트롤러에서 이러한 리소스에 어떻게 액세스할 수 있나요?상태 개체가 있더라도 확인된 속성을 추출하는 방법을 알 수 없습니다.

편집하다:나는 사용하고있다 UI 라우터 라우팅용 패키지입니다.

도움이 되었습니까?

해결책 2

아이디어는 필요한 데이터에 따라 결정 키를 추가하는 것입니다(참조 breadcrumb 아래 코드에서).이 키의 기능이 호출되면 데이터가 item 사용할 준비가 되었습니다.그런 다음 이를 상태(data 재산).

.state('some.item.detail.state', {
  url: '/:itemId',
  resolve: {
    item: function($stateParams, MyServerResource) { 
            return MyServerResource.get({itemId: $stateParams.itemId}).$promise;
          },
    breadcrumb: function(item) {
                  this.data = item;
                }
  },
  templateUrl: 'myTemplate.html'
}

전역 컨트롤러에서 데이터를 사용하려면 간단히 살펴보겠습니다. $state.current.data.

다른 팁

내가 이해하는 것처럼 당신은 이와 같은 것을 가지고 있습니다 :

  .when('/', {
    controller: 'HomeCtrl',
    templateUrl: 'home.html',
    resolve: {data: someDataFetcher}
  })
.

및 전역 컨트롤러의 데이터에 액세스해야합니다.나는 당신이 원하는 것을 완벽하게 이해하기 위해 코드 예제를보아야 할 것이지만, 공유 서비스를 사용하는 것이 좋습니다.

function HomeCtrl (data, myDataService) {
  myDataService.data = data;
}

function GlobalCtrl (myDataService) {
  myDataService.data // => The data
}
.

서비스는 하나의 인스턴스 만 있으므로 컨트롤러 전반의 상태 및 리소스를 공유 할 수 있도록 사용하기 쉽습니다.

희망이 도움이됩니다.

업데이트 :

해결 폐쇄 만들기 :

var myResolveClosure = function (resolver) {
    // Return a wrapper around the resolver
    return function (globalController, $q) { 
      var deferred = $q.defer();
      resolver($q).then(function (data) {
        globalController.addData(data);
        deferred.resolve(data);
      }).catch(function () {
        deferred.reject();
      });
      return deferred.promise;
    }
}

  .when('/', {
    controller: 'HomeCtrl',
    templateUrl: 'home.html',
    resolve: {
     data: myResolveClosure(function ($q) {
       var deferred = $q.defer();
       // do something and resolve with the data
       return deferred.promise;
     })
    }
  })
.

그래서 기본적으로 특정 해결자를 전달하여 해당 데이터를 가져와야합니다."myresolveclosure"는 resolver 주위에 함수를 묶어 일부 페치를 수행하기 위해 $ q를 특정 해결 자로 전달합니다.그런 다음 특정 해결 프로그램에서 데이터를 해결하고 전역 컨트롤러로 전역 컨트롤러로 전달 한 다음 지정한 컨트롤러도 데이터를 가져올 수 있도록 해결합니다.

이것이 의미가 있기를 바랍니다 : -)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top