Rumah > Soal Jawab > teks badan
请问我做了一个页面,其中header部分是ng include进来的(里面有logincontroller来判断是否显示login按钮),同时我在ngroute里面定义了一个登陆页面,它也用logincontroller,我通过$http拿到数据后回调给scope,但是视图页面没有更新,好像同一个controller有两个作用域一样,这是为什么?(我发现在nginclude完成的时候会执行一次logincontroller里面的东西,当进入登陆页面时又会触发一次)
我还尝试了网上说的$apply()结果会返回正在一个错误
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)
}
})
}
上面是controller的代码,其中在timeout里面由consolelog,如果打印它会一次出现三个,是不是我在三个地方都用了同一个ngcontroller的原因,如果注释调timeout中的$scope.user={islogged:1},会打印成这样的,这样对于我的任务来说就不正常了,我希望他们都是相同的
Object {islogged: 0}
Object {islogged: 0}
Object {islogged: 1}
如果取消$scope.user={islogged:1}注释让它运行就会正常打印三个controller都是正常的了。
Object {islogged: 1}
Object {islogged: 1}
Object {islogged: 1}
================
刚刚又测试了下,它是只在当前触发的ngcontroller下修改了数值,如果多个ngcontroller的话其它ngcontroller的数值不会发生变化,不管是在nginclude还是ngview下都是这样。如何让同一个ngcontroller修改的数据能同步到另一处?
世界只因有你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.