cari

Rumah  >  Soal Jawab  >  teks badan

angular.js - Bagaimana untuk menggunakan angular's run untuk menyimpan data pengguna?

Saya ingin menetapkan $rootScope.userinfo melalui run, dan kemudian dalam halaman yang berbeza, saya juga boleh menggunakan $rootScope.userinfo untuk mendapatkan maklumat pengguna semasa tanpa pergi ke pelayan untuk merangkaknya, tetapi sekarang saya telah menemui banyak masalah.
Buat pertama kali, saya terus $http dalam larian dan kemudian menetapkan $rootScope.userinfo=response, dan kemudian menggunakan $scope.userinfo=$rootScope.userinfo dalam setiap pengawal untuk menangkap maklumat pengguna ini ke dalam skop semasa untuk digunakan, tetapi Masalah yang tidak jelas berlaku;
Kali kedua saya menggunakan siaran dalam larian

        $rootScope.$broadcast("thisintheuserinfo", response);

Kemudian gunakan $on

dalam pengawal
$scope.$on("thisintheuserinfo",
        function (event, msg) {
            if(msg){
                //$scope.usernamea = msg.user;
                console.log('123')
                console.log(msg)
            }
            else{
                alert(msg)
            }

        });

Tetapi terdapat masalah bahawa kod dalam fungsi $on hampir tidak pernah dijalankan. Walau apa pun, lebih banyak salah dan kurang betul.
Jadi saya tidak tahu sama ada anda mempunyai kaedah yang bagus yang boleh saya pelajari?

怪我咯怪我咯2831 hari yang lalu816

membalas semua(1)saya akan balas

  • 怪我咯

    怪我咯2017-05-15 17:09:45

    Pada asasnya memenuhi keperluan, mungkin ada sedikit kesan sampingan.

    var app = angular.module('myApp', []);
    
    app.factory('User', function($q, $timeout){
        var userInfo, 
            loading, 
            deferred = $q.defer(),
            promise  = deferred.promise;
    
        return {
            getUserInfo: function(){
    
                if(!loading){
                    loading = true;
                    // 模拟http请求
                    console.log('发起请求...')
                    $timeout(function(){
                        userInfo = {
                            name: 'Angularjs',
                            version: '1.x'
                        };
                        deferred.resolve(userInfo);
    
                    }, 100);
    
                    return promise;
    
                }else if( userInfo ){
                    console.log('这是缓存的信息');
                    return $q.resolve(userInfo);
                }else{
                    console.log('正在等待请求的结果...');
                    return promise;
                }
            }
        }
    });
    
    app.controller('MyCtrl',function($scope, User, $timeout){
        User.getUserInfo().then(function(userInfo){
            console.log('run:',userInfo);
            $scope.name = userInfo.name;
        });
    });
    
    app.run(function(User){
        User.getUserInfo().then(function(userInfo){
            console.log('controller:',userInfo);
        });
    })

    balas
    0
  • Batalbalas