2014-02-23 4 views
0

저는 각도를 배우고 있습니다 - 현재 웹 응용 프로그램 사용자의 계정에 대한 정보를 ajax를 통해로드하는 애플리케이션이 있습니다.AngularJS/Bootstrap은 서비스 객체에 대한 변경 사항을 보지 못합니다.

문제는 내가 사용자 계정 결과가 들어 왔을 때 절대로 모르는 것처럼 보이는 각도/부트 스트랩 모달을 사용하고 있다는 것입니다. 표준 템플릿은 잘 작동하며 사용자 계정 데이터가 변경되면 새로 고칩니다. 모달 문제이거나 코드를 잘못 구성하는 경우 확실하지 않습니다.

나는 현재 사용자 정보를 저장하는 userAccount의 공장/서비스를 가지고 있습니다.

아약스 요청은 사용자 정보를 잡고, 그래서 분명히 약간의 지연이있다 :

$scope.$watch(function(){return userAccount;}, function(newUser,oldUser){ 
    $scope.user = newUser.user; 
}, true); 
: 내 루트 응용 프로그램 컨트롤러가 변경이 값을 감시하고 그것을 다른 필요한 행동 사이의 범위를 지정
$http({method: 'GET', url: 'api/url'}).success(function(resp, status, headers, config){ 
    if(resp.results){ 
    userAccount.user = resp.results; 
    } 
}); 

#/account에 대한 경로/컨트롤러 설정을 통해 사람을 계정 모드에 직접 연결할 수 있습니다. 그러나 사용자 계정 데이터가 반환되지 않은 시점에 모달이 열리고 userAccount 정보가 변경되지 않습니다. 테스트하려면 계정 컨트롤러에 watch을 추가하고 이벤트가로드시 한 번만 발생했습니다.

사용자 ajax 후에 모달을 열면 모두 정상적으로 작동합니다. 이는 모달이 원본에 대한 참조가 아닌 userAccount 객체의 복사본을 얻는 것과 같습니다. 코멘트를

.controller('AccountController', function ($scope, $modal, $http, userAccount) { 

    var modalInstance = $modal.open({ 
     templateUrl: 'modules/modal/account.tpl.html', 
     controller: ['$scope', '$http', 'userAccount', function ($scope, $http, userAccount) { 
      $scope.keys = userAccount.user.keys; 
      // Never alerted to changes for userAccount, even if watching. 

     }] 
    }); 
}) 

, 내가 모달을 위해 사용하고 경로 :

.config(function($stateProvider){ 
    $stateProvider 
    .state('account', { 
     url: "/account", 
     views: { 
     "modal": { 
      template: '', 
      controller: 'AccountController' 
     } 
     }, 
     data:{ pageTitle: 'My Account' } 
    }); 
}) 

뭔가 내가 각도에서 제대로 안하고에 어떤 도움이나 조언이 감사합니다.

+0

경로 설정이란 무엇입니까? – dfsq

+0

@ dfsq 질문에 경로 설정을 추가했습니다. – helion3

답변

0

userAccount의 참조가 변경되지 않았으므로 개체가 동일한 지 비교해야합니다. http://docs.angularjs.org/api/ng/type/ $ rootScope.Scope 그래, 할

$scope.$watch(function(){return userAccount;}, function(newUser,oldUser){ 
    $scope.user = newUser.user; 
}, true); 
+0

필자의 예에서는 미안하지만 포함시키지 않았습니다. 나는 그것을 업데이트 할 것이다 – helion3

+0

@ helion3 컨트롤러와'$ http' 요청 코드에 따라, 'userAccount'는 범위에 존재하지 않는다. 시계를 놓기 위해서는 각각의 범위에 존재해야한다. – hariom

+0

모멘트 컨트롤러에서 시계를 테스트 할 때 주 앱에서 두 번째'watch '인수를 사용하는 동안 내 앱에서 두 번째'watch' 인수를 사용했기 때문에 응답을 표시 한 것으로 나타났습니다. 이 인수를 두 번째'watch' 문에 모달 컨트롤러에 추가하면 문제가 해결됩니다. – helion3

관련 문제