因为觉得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初始化的时候把从服务器取一些值之后可以一直用
당신의 글쓰기 문제는 데이터 수집이 비동기적이라는 점을 발견하셨을 것입니다.
some.data
는 처음에는 여전히정의되지 않았습니다
. 하지만 당신의 직감은 맞습니다. 공통 데이터는공장
또는서비스
에 배치되어야 합니다. 이제 비동기 문제를 해결하기 위한 세 가지 솔루션이 있습니다.some.data
刚开始还是undefined
。但你的直觉是对的:通用的数据应当放在factory
或service
里面。现在来解决异步的问题,有三种方案:转化为同步。这是最直接的方案,把需要的数据在服务器端直接渲染在模板里,
factory
从HTML中取数据,一般用input
标签。沿着这个思路,更好的办法是在启动Angular App前设置好资源。可以参考这篇文章: http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1异步回调。用
factory
返回一个回调函数,这样写:使用Promise/Deffered模式来进行异步。随着项目越来越复杂,Promise是最终解决方案。Angular提供了该模式的实现
$q
,它是一个Service,$http.get
factory
는 일반적으로input
태그를 사용하여 HTML에서 데이터를 가져옵니다. 이러한 사고방식에 따라 Angular 앱을 시작하기 전에 리소스를 설정하는 것이 더 좋은 방법입니다. 이 기사를 참조할 수 있습니다: http://harttle.github.io/2015/05/31/angular-scope-initialize.html#1factory
를 사용하고 다음과 같이 작성하세요. 🎜 으아악 🎜 🎜비동기 작업에는 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...
수천 가지의 초기화 방법이 있습니다. 중요한 것은 원하는 값을 동기식으로 얻느냐, 비동기식으로 얻느냐가 아니라, 언제 어디서 사용하느냐입니다. 목표 방향은 초기화에 사용하는 방법을 결정합니다. 물론 대부분의 경우 Promise를 사용하는 것이 좋습니다.