Rumah > Soal Jawab > teks badan
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?
世界只因有你2017-05-15 16:53:08
Adakah anda pasti skop yang sama? ng-include
Skop baharu akan dibuat.
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>
漂亮男人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.
漂亮男人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.