请问我做了一个页面,其中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修改的数据能同步到另一处?
同じスコープですか?
ng-include
新しいスコープが作成されます。コードを読んだ後
確かに、各コントローラーは別個のインスタンスであり、相互に影響を与えません。データのステータスをグローバル (より高いレベル) スコープの下に置くことを検討できます。より良い方法は、サービスを通じて均一に管理することです
。例:
リーリー$scope.$apply() が機能しないのですが?
2 つの場所に表示されるもの
$scope
が、一方が他方のサブスコープであるなどではなく、同じスコープであることを確認することが最善です。コードを投稿した方が良いでしょう〜
私も同じ問題に遭遇しました。 $scope を初めて変更したとき、インターフェース上のデータは移動しませんでしたが、インターフェースが変更されると (たとえば、フェードアウトし始めたとき)、データが変更されます。 $ スコープが再び変更されると、それに応じてインターフェイスも変更されます。
$apply も使用してみましたが、エラーの長いリストが報告されます。何かがすでに使用されているなどと言われます...理解できません...解決策があることを願っています。