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

因为觉得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 は最初はまだ unknown でした。しかし、あなたの直感は正しいです。共通データは factory または service に配置する必要があります。非同期の問題を解決するには、3 つの解決策があります: 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. 同期に変換します。これは最も直接的な解決策であり、通常は input タグを使用して、factory が HTML からデータを取得します。この考え方に沿ったより良い方法は、Angular アプリを開始する前にリソースをセットアップすることです。この記事を参照してください: http://harttle.github.io/2015/05/31/angular-scope-in​​itialize.html#1
🎜非同期コールバック。 factory を使用してコールバック関数を返し、次のように記述します: 🎜 リーリー 🎜 🎜非同期操作には Promise/Defered モードを使用します。プロジェクトが複雑になるにつれてPromise が究極のソリューションとなります。 Angular は、このパターン $q の実装を提供します。これは、 $http.get が Promise インスタンスを返すサービスです。このように使用されます: 🎜 リーリー 🎜 🎜
いいねを押す +0
给我你的怀抱

angular.run(fn)

いいねを押す +0
某草草

angularjs $http は同期取得をサポートしていません

バックエンドからフロントエンドにresponse.writeを初期化または出力したい
または、jquery の ajax ブロッキングを使用してデータを取得し、angular を初期化します
ルーティングの場合、resolve を使用してコントローラーを挿入できます

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

いいねを押す +0
PHPzhong

初期化メソッドは何千もあります。重要なのは、必要な値を同期的に取得するか非同期的に取得するかではなく、それをいつどこで使用するかです。目標の方向性によって、初期化に使用する方法が決まります。もちろん、ほとんどの場合、Promise を使用することをお勧めします。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!