찾다

 >  Q&A  >  본문

angular.js - angular 中 $scope 不刷新的问题

请问我做了一个页面,其中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修改的数据能同步到另一处?

ringa_leeringa_lee2739일 전1024

모든 응답(5)나는 대답할 것이다

  • 世界只因有你

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

    확실히 같은 범위인가요? ng-include새로운 범위가 생성됩니다.

    코드를 읽은 후

    각 컨트롤러는 별도의 인스턴스이며 서로 영향을 미치지 않는다는 것은 사실입니다. 데이터 상태를 글로벌(상위 수준) 범위에 두는 것을 고려할 수 있습니다. 서비스를 통해 균일하게 관리하는 것이 더 좋습니다.

    예:

    으아아아

    회신하다
    0
  • 怪我咯

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

    $scope.$apply()가 작동하지 않나요?

    회신하다
    0
  • 漂亮男人

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

    한 곳이 다른 곳의 하위 범위가 아닌 두 곳에서 보이는 것이 $scope 동일한 범위인지 확인하는 것이 가장 좋습니다.

    회신하다
    0
  • 伊谢尔伦

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

    코드를 올려주시면 더 좋을 것 같아요~

    회신하다
    0
  • 漂亮男人

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

    저도 같은 문제에 직면했습니다. $scope가 처음 변경되었을 때 인터페이스의 데이터가 이동하지 않았습니다. 그러나 인터페이스가 변경되면(예: 페이드 아웃되기 시작했을 때) 데이터가 즉시 변경되었습니다. 그러면 $scope가 다시 변경되고 이에 따라 인터페이스가 변경됩니다.

    $apply를 사용해 보았지만 이미 사용 중인 항목이 있다는 등의 긴 오류 목록이 보고됩니다. 이해가 안 됩니다... 해결 방법이 있었으면 좋겠습니다.

    회신하다
    0
  • 취소회신하다