찾다

 >  Q&A  >  본문

angle.js - 각도 초기화 중에 $http를 팩토리 초기값에 할당하는 방법

공장이 싱글톤이라고 생각하기 때문에 http 결과를 공장의 반환 값으로 사용합니다. 각도 초기화 중에 $http를 사용하여 공장에 초기 값을 할당하려면 어떻게 해야 합니까?
angular.module('some',[]) .factory('factory',function($http){ var some = {}; $http.get('url') .success(function(resp){ some.data = resp; }) return some.data; })
이제 이렇게 작성되었으면 좋겠습니다. Angular가 초기화되면 서버에서 일부 값을 가져와서 계속 사용할 수 있기를 바랍니다.

phpcn_u1582phpcn_u15822792일 전767

모든 응답(4)나는 대답할 것이다

  • 習慣沉默

    習慣沉默2017-05-15 16:56:00

    당신의 글쓰기 문제는 데이터 수집이 비동기적이라는 점을 발견하셨을 것입니다. some.data는 처음에는 여전히 정의되지 않았습니다. 하지만 당신의 직감은 맞습니다. 공통 데이터는 공장 또는 서비스에 배치되어야 합니다. 이제 비동기 문제를 해결하기 위한 세 가지 솔루션이 있습니다. some.data刚开始还是undefined。但你的直觉是对的:通用的数据应当放在factoryservice里面。现在来解决异步的问题,有三种方案:

    1. 转化为同步。这是最直接的方案,把需要的数据在服务器端直接渲染在模板里,factory从HTML中取数据,一般用input标签。沿着这个思路,更好的办法是在启动Angular App前设置好资源。可以参考这篇文章: http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1

    2. 异步回调。用factory返回一个回调函数,这样写:

      javascriptxxx.factory('some', function($http){
          var some = {}
          function get(cb){       
              if(some.data) return cb(some.data);     
              $http.get('').success(function(d){
                  cb(some.data = d);
              });
          }
          return get;
      });
      ...
      some.get(function(data){
          console.log(data);
      });
      
    3. 使用Promise/Deffered模式来进行异步。随着项目越来越复杂,Promise是最终解决方案。Angular提供了该模式的实现$q,它是一个Service,$http.get <올>

    4. 동기화로 변환하세요. 이것이 가장 직접적인 솔루션입니다. 필요한 데이터는 서버측 템플릿에서 직접 렌더링됩니다. factory는 일반적으로 input 태그를 사용하여 HTML에서 데이터를 가져옵니다. 이러한 사고방식에 따라 Angular 앱을 시작하기 전에 리소스를 설정하는 것이 더 좋은 방법입니다. 이 기사를 참조할 수 있습니다: http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1
    <리> 🎜비동기 콜백. 콜백 함수를 반환하려면 factory를 사용하고 다음과 같이 작성하세요. 🎜 으아악 🎜 <리> 🎜비동기 작업에는 Promise/Deffered 모드를 사용하세요. 프로젝트가 더욱 복잡해짐에 따라 Promise가 최고의 솔루션입니다. Angular는 $http.get가 Promise 인스턴스를 반환하는 이 패턴 $q의 구현을 제공합니다. 다음과 같이 사용됩니다: 🎜 으아악 🎜 🎜

    회신하다
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-15 16:56:00

    angular.run(fn)

    회신하다
    0
  • 某草草

    某草草2017-05-15 16:56:00

    angularjs $http는 동기 획득을 지원하지 않습니다

    백엔드에서 프런트엔드로 response.write를 초기화하거나 출력하고 싶습니다
    또는 jquery의 ajax 차단을 사용하여 데이터를 가져온 다음 각도를 초기화하세요
    라우팅의 경우 해결을 사용하여 컨트롤러를 삽입할 수 있습니다

    http://stackoverflow.com/questions/16286605/initialize-angularjs-servi...

    회신하다
    0
  • PHPz

    PHPz2017-05-15 16:56:00

    수천 가지의 초기화 방법이 있습니다. 중요한 것은 원하는 값을 동기식으로 얻느냐, 비동기식으로 얻느냐가 아니라, 언제 어디서 사용하느냐입니다. 목표 방향은 초기화에 사용하는 방법을 결정합니다. 물론 대부분의 경우 Promise를 사용하는 것이 좋습니다.

    회신하다
    0
  • 취소회신하다