2017-10-16 24 views
0

윈도우 이벤트를 통해 인스턴스화 된 각도 $ scope 변수가 있습니다. $ scope 변수는 사용자에게 올바르게 표시되지만 ng-model을 통해 업데이트가 설정되지 않습니다. 이상한 점은 ng-change가 스코프 변수를 수동으로 설정하는 데 사용할 수있는 올바른 값을 가지고 있다는 것입니다.

나는 이것이 왜 일어나고 있는지 정말로 이해하지 못합니다.

이벤트 처리기 :

document.addEventListener('updateSearchBar', handleUpdate); 
function handleUpdate(eventData) { 
    $scope.benefitsFromDate = eventData.detail.fromDate; 
    $scope.$apply(); 
} 

프런트 엔드 :

<input 
    type="date" 
    name="fromDate" 
    ng-change="updateBenefitsFromDate(benefitsFromDate)" 
    ng-model="benefitsFromDate" 
/> 
<input 
    type="button" 
    value="Search" 
    class="btn btn-default" 
    ng-click="searchDocuments()" 
    ng-disabled="isSearchingDocuments" 
/> 

각도 조각은 :

$scope.updateBenefitsFromDate = function(change) { 
    console.log($scope.benefitsFromDate); //still has old value 
    console.log(change); //has updated value when param is the $scope variable 
    //$scope.benefitsFromDate = change; //only way to update 
}; 

$scope.searchDocuments = function() { 
    //ng-model never updates the variable when the value is changed and uses the instantiated value 
    console.log($scope.benefitsFromDate); 
}; 

왜 겨 모델은 변경 사항을 반영하지만, $ 범위를 통과하지 않습니다. benefits- 변경 함수의 FemDate에 업데이트 된 값이 있습니까?

답변

0

이러한 종류의 업데이트를 처리 할 때 $timeout 모듈을 사용하고 $scope.$apply()으로 전화하지 마십시오.

$timeout(function() { 
    $scope.benefitsFromDate = eventData.detail.fromDate; 
}); 
0

"도트 규칙"에 대해 각도가 까다로운 것을 알았습니다.

내가 할 일은 내 데이터 값에 다른 접두사를 붙이는 것뿐이었습니다.

$scope.data = {}; 
$scope.data.benefitsFromDate = ...; 

또는 당신이 사용하는 컨트롤러를 선언 할 수 as

ng-controller="appController as vm"