2014-12-16 3 views
3

내 공장에서는 내 앱의 나머지 부분에 중요한 데이터를 가져 오는 요청을받습니다. 앱이 초기화되었지만 HTTP 요청이 나머지 코드보다 오래 걸리면 현재 공장을 실행하기 위해 app.run() 함수를 사용하고 있습니다. '/ home'을 탐색하고 앱을 초기화 한 다음 '/ map'으로 이동하면 완벽하게 작동하지만 '/ map'을 탐색하고 초기화 요청을하면 get 요청의 데이터가로드되지 않기 때문에 초기화되지 않습니다 그 페이지. 누구든지 컨트롤러 및 나머지 프로그램으로 이동하기 전에 내 http 요청이 완전히 실행되도록하는 방법을 알고 있습니까?나머지 코드를 실행하기 전에 공장에서 HTTP 요청을 실행하는 방법

일부 연구를 수행하는 것은 각도적인 방법으로 약속을 사용하는 것처럼 보입니다. 그러나, 나는 공장을 운영하거나 컨트롤러를 연기하거나 심지어 가능하다면 어떻게 약속 할 것인지 모른다. 그래서 당신이 이것에 대한 생각이나 문서에 대한 링크가 있다면 그것은 인정 될 것입니다.

내 모듈 선언 HTTP 요청이 나는 범위를 설정

angular.module('Ski').factory('MountainFactory', function($http, $q) { 
    var mountain = {}; 
    var fetch = function() { 
    $http.get('https://quiet-journey-8066.herokuapp.com/mountains/3') 
     .success(function(response) { 
      angular.copy(response, mountain); 
      }); 
    }; 
    return { 
    fetch: fetch, 
    mountain: mountain 
    }; 
}); 

컨트롤러

angular.module('Ski', [ 
    'ngRoute' 
]).run(function(MountainFactory, $q){ 
    MountainFactory.fetch(); 
}); 

공장.

angular.module('Ski').controller('MapCtrl', function($scope, $http, MountainFactory) { 
    'use strict'; 
    $scope.mountain = MountainFactory.mountain; 
}); 

내 지시어 어디 get 요청 데이터로 내지도를 설정합니다. 길고 혼란 스럽지만이 코드를 포함하지 않았지만 데이터 http 요청이 실행되고 범위가 설정되면이 지시문이 올바르게 작동하므로 포함하지 않았습니다.

angular.module('Ski').directive('mapCanvas', function() { 

    function link (scope, element, attrs) { 
     //code here where I make a map. 

    } 
    return { 

     scope: { 
     lat: '@', 
     lng: '@', 
     map: '@map' 
     }, 

     link: link, 

    }; 
    }); 

map.html -> '/지도'여기

<div ng-controller="MapCtrl"> 
    <h1>{{mountain.name}}</h1> 
    <div map-canvas lat="{{lat}}" lng="{{lng}}" id="map-canvas" style="width: 500px; height: 500px;"></div> 
    <div ng-controller="MarkerCtrl"> 
    <a ng-click="makeMarker()"> New Marker </a> 
    <button ng-click="makeMarker()"type="button" class="btn btn-primary">Create</button> 
    </div> 
</div> 
+1

가치가 변경되면 전체보기를 업데이트하기 위해 감시자를 사용할 수 있지만 특정 세트가 필요한 경우 약속 완료 (성공) – sam

+1

에서 모든 것을 간단하게 관리해야합니다. 각도 앱이 실행되기 전에 항상 사용할 수있는 데이터 *이 답변을보십시오 [비동기 데이터로 AngularJS 서비스 초기화하기] (http://stackoverflow.com/a/19871327/2943490) – user2943490

답변

1

내가 내 모듈을 등록 app.js이 ... 그래서 나는이 같은 내 컨트롤러를 설정할 수의 경로 :

.state('app.registro', { 
     url: "/registro", 
     views: { 
     'menuContent' :{ 
      templateUrl: "templates/registro.html", 
      controller: 'RegistroCtrl' 
      //resolve: { 
      // cordova: function($q) { 
      // var deferred = $q.defer(); 
      // ionic.Platform.ready(function() { 
      //  console.log('ionic.Platform.ready'); 
      //  deferred.resolve(); 
      // }); 
      // return deferred.promise; 
      // } 
      //} 
     } 
     } 
    }) 

주석 처리 된 블록은 요청할 블록입니다. 이렇게하면 컨트롤러는 요청을 기다립니다 ...

+0

표준 라우터에서 작동합니까? ? – tibbon

+0

안녕하세요. 예. 다음을 살펴보십시오. [https://docs.angularjs.org/api/ngRoute/service/$route] 및 script.js 파일을보십시오. 전화해야하는 곳인 '해결'절이 나타납니다. – quicoli

관련 문제