angular.js - 怎么在angular初始化时$http为factory赋初值
phpcn_u1582
phpcn_u1582 2017-05-15 16:54:00
0
4
745

因为觉得factory是单例的所以把http结果作为factory的返回值,怎么做到在angular初始化时$http为factory赋初值?
angular.module('some',[]) .factory('factory',function($http){ var some = {}; $http.get('url') .success(function(resp){ some.data = resp; }) return some.data; })
现在类似是这样写的,我就希望angular初始化的时候把从服务器取一些值之后可以一直用

phpcn_u1582
phpcn_u1582

모든 응답(4)
習慣沉默

당신의 글쓰기 문제는 데이터 수집이 비동기적이라는 점을 발견하셨을 것입니다. 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의 구현을 제공합니다. 다음과 같이 사용됩니다: 🎜 으아악 🎜 🎜
给我你的怀抱

angular.run(fn)

某草草

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

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

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

PHPzhong

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿