angular.js - angularjs 传输数据问题
我想大声告诉你
我想大声告诉你 2017-05-15 17:09:07
0
3
421

有什么方法在加载控制器前先从服务端得到某些数据?从而在controller中能保证得到值?(头大,黑线···)

定义了一个factory gData如下

angular.module('myapp', ['user'])
    .factory('gData', function ($http) {
            //$rootScope该怎么用????
            var data = {
                userInfo:{}
            };
                $http.get('user/getProfile', {})
                    .then(function (r) {
                        console.log(r.data); //这是console1
                        if(r.data.status == 1) {
                            data.userInfo.userId = r.data.data['user'].id;
                            data.userInfo.name = r.data.data['user'].name;
                            data.userInfo.group_id = r.data.data['user'].groups[0].id;
                            data.userInfo.supervisor_id = r.data.data['user'].groups[0].supervisor_id;
                        }
                    });
            console.log(data);//这是console2
            return data;
        })
    由于异步加载,console2先于1执行,所以返回的空值。
//请假条controller,user model中
       .controller('AskforLeaveController', [
           '$scope',
           'UserService',
           '$filter',
           'gData',
           function ($scope, UserService,$filter,gData) {
           
               console.log(gData.userInfo); //有值
               console.log(gData.userInfo.userId);//undefind
               
                UserService.askLeaveInfo.user_id = gData.userInfo.userId; //失败,undefind!!!!how can I do
              UserService.askLeaveInfo.supervisor_id = gData.userInfo.supervisor_id; //失败,undefind
              
              //...

求解啊,该怎么处理???(哭)各种方法弄两天了

还有个问题,myapp下定义的$rootScope在user下的controller里居然也提示我undefind...

我想大声告诉你
我想大声告诉你

全員に返信(3)
小葫芦

うーん…こんな感じ?試してみてください、私の最初の直感、何をすればよいかわかりません = = 直感のためのプログラム、間違っていても私を責めないでください

リーリー
いいねを押す +0
Ty80

うーん、それが普通ですね。

promise オブジェクト を返します。データは返さず、直接 return $http.get(xxx); を返しますpromise对象,不要返回data,直接return $http.get(xxx);

后面调用factory的时候直接。

factory.func().then(data) {
    //你的逻辑
}

非常规思路,以前干过...

  1. 在factory给个回调方法参数,在请求完成后,调用回调,把userInfo放到参数中。

  2. 添加一个$watch,在有值后(change会触发,记得要判断不为空,貌似初始化的时候也会触发watch),进行处理。记得处理完后后删除watch,调用后会返回var unwatch = $watch()的方法,直接unwatch();

    後で工場に電話するときに直接。
  3. リーリー
  4. 型破りなアイデア、以前にもやったことがあります…

  5. ファクトリでコールバック メソッドのパラメータを指定します。リクエストが完了したら、コールバックを呼び出し、パラメータに userInfo を入れます。
🎜 🎜🎜 $watch を追加し、値が入ったら処理します (変更がトリガーされます。空でないことを忘れずに確認してください。初期化中にも watch がトリガーされるようです)。処理後にウォッチを削除することを忘れないでください。呼び出した後は、unwatch(); メソッドを直接実行するだけです。 🎜🎜 🎜🎜イベントを送信します (工場では機能しないはずです)? 。 🎜🎜 🎜
いいねを押す +0
我想大声告诉你

Promise を知っているかどうかわかりませんが?
$http.get() メソッドは Promise を返します。Promise がわからない場合は、まず Google で調べてください
次のようなアイデアがあります:

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