angular.js - masalah penghantaran data angularjs
我想大声告诉你
我想大声告诉你 2017-05-15 17:09:07
0
3
471

Adakah terdapat sebarang cara untuk mendapatkan beberapa data daripada pelayan sebelum memuatkan pengawal? Supaya nilai boleh terjamin dalam pengawal? (Kepala besar, garis hitam...)

GData kilang ditakrifkan seperti berikut

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
              
              //...

Sila beritahu saya, bagaimana untuk menanganinya? ? ? (Menangis) Saya telah melakukan ini selama dua hari menggunakan pelbagai kaedah

Terdapat masalah lain $rootScope yang ditakrifkan di bawah myapp dalam pengawal di bawah pengguna sebenarnya menggesa saya untuk menyahtemui...

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

membalas semua(3)
小葫芦

Em... macam ni? cubalah, naluri pertama saya, saya tidak tahu apa yang perlu dilakukan = = Program untuk gerak hati, jangan salahkan saya jika anda salah

 $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;
                        }.then(function(){
                        console.log(data);//这是console2
                        return data;
                        })
                    });
            
Ty80

Em, itu perkara biasa.

Kembalikanpromise对象, jangan pulangkan data, hanya return $http.get(xxx);

Terus bila call kilang nanti.

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

Idea yang tidak konvensional, saya pernah melakukannya...

  1. Berikan parameter kaedah panggil balik di kilang Selepas permintaan selesai, panggil panggilan balik dan letakkan userInfodalam ​​parameter.

  2. Tambah $watch dan proses selepas ada nilai (perubahan akan mencetuskan, ingat untuk menyemak jika ia tidak kosong, nampaknya jam tangan juga akan dicetuskan semasa pemula). Ingat untuk memadam jam tangan selepas pemprosesan Kaedah akan kembali var unwatch = $watch() selepas memanggilnya terus unwatch();.

  3. Hantar acara (tidak sepatutnya bekerja di kilang)? .

我想大声告诉你

Saya tidak tahu sama ada anda tahu janji?
Kaedah $http.get() akan mengembalikan janji Jika anda tidak faham janji, sila google dahulu
Berikut ialah idea:

angular.module('myapp', ['user'])
    //创建service
    .service('user.service', function($http,$q) {
        var userInfo = null;
        return {
            getUserInfo: function () {
                return $q(function (resolve) {
                    if (userInfo) {
                        resolve(userInfo);
                    }else {
                        $http.get('/user/getProfile', {}).then(function (resp) {
                            userInfo = {
                                userId:resp.data.user.id,
                                name:resp.data.user.name,
                                group_id:resp.data.groups[0].id,
                                supervisor_id:resp.data.groups[0].supervisor_id,
                            };
                            resolve(userInfo);
                        });
                    }
                });
            }
        };
    })
    //使用这个service
    .controller('xxx',['user.service',function (service) {
        service.getUserInfo().then(function (userInfo) {
            console.log(userInfo);
        });
    }]);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan