AngularJS가 할 수있는 흥미로운 작업 중 하나는 특정 데이터 바인딩 표현식에 필터를 적용하는 것입니다. 이는 예를 들어 문화 별 통화 또는 모델 속성의 날짜 형식 지정을 적용하는 편리한 방법입니다. 스코프에 대해 계산 된 속성을 갖는 것도 좋습니다. 문제는 이러한 기능 중 어느 것도 양방향 데이터 바인딩 시나리오에서 작동하지 않는다는 것입니다. 범위에서 뷰로의 단방향 데이터 바인딩 만 가능합니다. 이것은 다른 훌륭한 도서관에서 눈부신 누락으로 보입니다-아니면 내가 뭔가를 놓치고 있습니까?
KnockoutJS 에서는 읽기 / 쓰기 계산 된 속성을 만들 수 있습니다.이 속성을 사용하면 한 쌍의 함수를 지정할 수 있습니다. 하나는 속성 값을 가져 오기 위해 호출되고 다른 하나는 속성이 설정 될 때 호출됩니다. 이를 통해 예를 들어 문화 인식 입력을 구현할 수있었습니다. 사용자가 "$ 1.24"를 입력하고이를 ViewModel의 float로 파싱하고 ViewModel의 변경 사항이 입력에 반영되도록했습니다.
이것과 비슷한 것을 찾을 수있는 가장 가까운 것은 $scope.$watch(propertyName, functionOrNGExpression);
This를 사용하면 속성이 $scope
변경 될 때 함수를 호출 할 수 있다는 것 입니다. 그러나 이것은 예를 들어 문화 인식 입력 문제를 해결하지 못합니다. 메서드 자체 에서 $watched
속성 을 수정하려고 할 때 문제를 확인 $watch
합니다.
$scope.$watch("property", function (newValue, oldValue) {
$scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue;
$scope.property = Globalize.parseFloat(newValue);
});
( http://jsfiddle.net/gyZH8/2/ )
사용자가 입력을 시작하면 입력 요소가 매우 혼란스러워집니다. 속성을 구문 분석되지 않은 값과 구문 분석 된 값에 대한 두 개의 속성으로 분할하여 개선했습니다.
$scope.visibleProperty= 0.0;
$scope.hiddenProperty = 0.0;
$scope.$watch("visibleProperty", function (newValue, oldValue) {
$scope.outputMessage = "oldValue: " + oldValue + " newValue: " + newValue;
$scope.hiddenProperty = Globalize.parseFloat(newValue);
});
( http://jsfiddle.net/XkPNv/1/ )
이것은 첫 번째 버전에 비해 개선되었지만 조금 더 장황하며, 여전히 parsedValue
범위 의 속성 변경 문제가 있음을 알 수 있습니다 (두 번째 입력에 무언가를 입력하면 parsedValue
직접 변경 됩니다. 상단 입력은 그렇지 않습니다. 최신 정보). 이는 컨트롤러 작업 또는 데이터 서비스에서 데이터를로드 할 때 발생할 수 있습니다.
AngularJS를 사용하여이 시나리오를 구현하는 더 쉬운 방법이 있습니까? 문서에서 일부 기능이 누락 되었습니까?