2015-01-19 3 views
1

이 문제는 다음 states에서 봐 주시기 바랍니다 설명하기 :

.state('app.play.lobby', { 
      url: '/lobby', 
      resolve: { 
       games: function (FirebaseAdapter) { 
        return FirebaseAdapter 
         .syncArray('disciplines') 
         .$loaded() 
         .then(function (list) { 
          return list; 
         }); 
       }, 
       tournaments: function (FirebaseAdapter) { 
        return FirebaseAdapter 
         .syncArray('tournaments') 
         .$loaded() 
         .then(function (list) { 
          return list; 
         }); 
       } 
      }, 
      views: { 
       filter: { 
        templateUrl: 'play/lobby/filter.tpl.html', 
        controller: LobbyFilterController 
       }, 
       browser: { 
        templateUrl: 'play/lobby/browser.tpl.html', 
        controller: LobbyBrowserController 
       } 
      } 
     }); 

모든 것이 잘 작동한다. 문제는 : 컨트롤러 LobbyFilterController에서 나는 객체 변경을 듣기 위해 $scope.$watch()을 사용하고 있습니다. 그러나 $watch() 명령이 성공적으로 실행 된 후에는 상태가 성공적으로로드 된 후입니다. 상태가로드되고 객체 안의 속성 값을 변경하면 아무 일도 일어나지 않습니다.

LobbyFilterController

function LobbyFilterController($scope, games, TournamentFilter) { 
    $scope.filter = { 
     game: null, 
     mode: 'regular', 
     type: 'all', 
     format: 'all', 
     eliminationMode: 'all', 
     gridsize: 'all', 
     status: 'all', 
     groupstage: false, 
     reshuffledGrid: false, 
     password: false 
    }; 

    $scope.$watch($scope.filter, function(data) { 
     console.log('filter changed...'); 
    }, true); 
} 

이 문제는 내가 같은 $ scope.myVar로 정상적인 값을 사용하려고 할 때 변경되지 않습니다. 로드 후 이벤트가 한 번 발생하므로 실수하지 않았 음을 알았습니다 (잘못하면 틀 렸습니다).

답변

0

문자열 또는 값을 반환하는 함수 식으로 감시 속성 (또는 watch expression)을 제공해야합니다. 대신 개체를 설정하고 있습니다. 로 변경 시도 :

$scope.$watch('filter', function(data) { 
    console.log('filter changed...'); 
}, true); 

$ 시계가 제공되는 표현에서 $parse to create 게터를 사용합니다. 그리고 당신이 제공 한 것은 문자열이나 함수만을 찾는 것처럼 무시 될 표현식으로서의 객체입니다. case statements at the source을 살펴보십시오. 그리고 모든 관측통은 적어도 한 번만 불을 끄고 귀하의 경우에도 발생하는 다이제스트주기 동안 점검을 시작합니다. 그리고 첫 번째 실행에서 인수를 조회하면 두 가지 값이 모두 정의되지 않은 것을 볼 수 있습니다. 실제로 본 것이 없기 때문입니다 감시자는 항상 오버라이드 된 angular.noop 함수를 사용하여 undefined을 반환합니다.

+0

그리고 API를 신중하게 읽은 것 같습니다. 감사합니다. – Fortuna

+0

@ 벤자민 당신을 진심으로 환영합니다. – PSL

관련 문제