cari

Rumah  >  Soal Jawab  >  teks badan

angular.js - Masalah $scope tidak menyegarkan dalam sudut

Maafkan saya, saya membuat halaman di mana bahagian pengepala diimport dari ng include (terdapat pengawal masuk di dalamnya untuk menentukan sama ada untuk memaparkan butang log masuk Pada masa yang sama, saya menentukan halaman log masuk dalam ngroute,). yang juga menggunakan logincontroller saya lulus $http Selepas mendapat data, saya memanggil semula skop, tetapi halaman paparan tidak dikemas kini Nampaknya pengawal yang sama mempunyai dua skop. (Saya mendapati bahawa apabila nginclude selesai, perkara dalam logincontroller akan dilaksanakan sekali, dan akan dicetuskan semula apabila memasuki halaman log masuk)

Saya juga mencuba $apply() seperti yang dinyatakan dalam talian dan hasilnya akan menjadi ralat

    function($scope,$http,$location,$timeout,userService,notifyService) {
        $scope.login = {
            userid:"bbbbb",
        }
        $scope.user={islogged:0}
        $timeout(function(){ 
            //$scope.user={islogged:1}
            console.log($scope.user);
        },5000)
        $scope.httplogin = function(){
            $http({
                method:'POST',
                url:server.domain+server.login,
                data:{
                    userid:$scope.login.userid,
                    password:$scope.login.password,
                },
            }).success(function(d){
                if(d.code == 200){
                    $scope.login={userid:1111111}
                    $scope.user={islogged:1}
                    notifyService.make('success',d.data.msg,5)
                }else{
                    alert(d.msg)
                }
            })
        }

Di atas ialah kod pengawal, yang mengandungi consolelog dalam masa tamat Jika ia dicetak, tiga akan muncul serentak Adakah kerana saya menggunakan ngcontroller yang sama di tiga tempat panggilan komen $scope.user={islogged:1} dalam tamat masa akan dicetak seperti ini, yang tidak normal untuk tugas saya. Saya harap mereka semua sama

Object {islogged: 0}
Object {islogged: 0}
Object {islogged: 1}

Jika anda menyahkomen $scope.user={islogged:1} dan membiarkannya berjalan, ketiga-tiga pengawal akan dicetak seperti biasa.

Object {islogged: 1}
Object {islogged: 1}
Object {islogged: 1}

================
Saya baru saja mengujinya sekali lagi, dan ia hanya mengubah nilai di bawah ngcontroller yang dicetuskan pada masa ini Jika terdapat berbilang ngcontrollers, nilai ngcontroller lain tidak akan berubah, sama ada ia berada di bawah nginclude atau ngview. Bagaimana untuk menyegerakkan data yang diubah suai oleh ngcontroller yang sama ke tempat lain?

ringa_leeringa_lee2774 hari yang lalu1044

membalas semua(5)saya akan balas

  • 世界只因有你

    世界只因有你2017-05-15 16:53:08

    Adakah anda pasti skop yang sama? ng-includeSkop baharu akan dibuat.

    Selepas membaca kod

    Memang benar setiap pengawal adalah contoh yang berasingan dan tidak menjejaskan satu sama lain. Anda boleh mempertimbangkan untuk meletakkan status data di bawah skop global (peringkat lebih tinggi); cara yang lebih baik ialah mengurusnya secara seragam melalui perkhidmatan

    Contohnya:

    html<body ng-app="app">
    
        <p ng-controller="loginCtrl">
            <pre>{{info}}</pre>
        </p>
        <script type="text/javascript">
        var app = angular.module('app', []);
    
        app.factory('login', ['$timeout', function($timeout){
            var ret = {
    
                info: {
                    isIn: false
                }
            };
    
            // 模拟ajax请求
            $timeout(function() {
                ret.info.isIn = true;
            }, 1000);
    
            return ret;
        }]);
    
        app.controller('loginCtrl', ['$scope', 'login', function($scope, login){
    
            $scope.info = login.info;
        }])
        </script>
    </body>
    

    balas
    0
  • 怪我咯

    怪我咯2017-05-15 16:53:08

    $scope.$apply() tidak berfungsi?

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-15 16:53:08

    Adalah yang terbaik untuk memastikan bahawa $scope yang anda lihat di dua tempat adalah skop yang sama, dan bukannya satu daripadanya adalah subskop yang lain.

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:53:08

    Adalah lebih baik untuk menyiarkan kod~

    balas
    0
  • 漂亮男人

    漂亮男人2017-05-15 16:53:08

    Saya juga menghadapi masalah yang sama Apabila $scope ditukar buat kali pertama, data pada antara muka tidak bergerak Tetapi apabila antara muka berubah (contohnya, apabila ia mula pudar) data akan berubah serta-merta , dan kemudian $scope Apabila ia berubah lagi, antara muka berubah dengan sewajarnya.

    Saya juga cuba menggunakan $apply, tetapi ia akan melaporkan senarai ralat yang panjang Dikatakan bahawa sesuatu sudah digunakan, dll... Saya tidak faham... Saya harap ada penyelesaian.

    balas
    0
  • Batalbalas