2014-04-04 6 views
0

AngularJS 프로젝트에서 드롭 다운 날짜 피커로 ui-date 구성 요소를 사용하고 있습니다. 내가 가지고있는 문제는 모델과 datepicker 사이의 데이터 바인딩이 예상대로 양방향이 아닌 단방향 일 뿐이라는 것입니다.AngularJS 데이터 바인딩이 ui 날짜 구성 요소와 작동하지 않습니다.

내 HTML에는 사용자가 한 번에 날짜를 뒤로 및 앞으로 조정할 수있는 이전 및 다음 버튼이 있습니다. 또는 날짜 상자 자체를 클릭하여 드롭 다운 날짜 피커를 표시하고 원하는 날짜를 지정할 수 있습니다.

Plunker here.

HTML :

ThisDate: {{ ThisDate }} 
<p> 
<button ng-click="PrevDay()">&lt; Prev</button> 
<button ng-click="NextDay()">Next &gt;</button> 
<p> 
Set Date: <input ui-date ng-model="ThisDate" id="ThisDate"> 

자바 스크립트 :

var app = angular.module('app', ['ui.date']); 

app.controller('MyController', function($scope) { 
    $scope.ThisDate = new Date(); 

    $scope.PrevDay = function() { 
     $scope.ThisDate = DateOffset($scope.ThisDate, -1); 
    }; 

    $scope.NextDay = function() { 
     $scope.ThisDate = DateOffset($scope.ThisDate, 1); 
    }; 

    function DateOffset(ThisDate, NumDays) { 
     var d = ThisDate; 
     d.setDate(d.getDate() + NumDays); 
     return d 
    } 
}); 

문제 :

드롭 다운 datepicker를 사용하여 날짜를 변경하면 날짜 상자가 변경되고 {{ ThisDate }}이 올바르게 업데이트됩니다. 그러나 이전 또는 다음 버튼을 클릭하면 바인딩 된 {{ ThisDate }} 만 변경됩니다 ... 모델의 "ThisDate"에 바인딩 된 날짜 상자가 아닙니다.

단계 재현하기 :

는 Plunker를 실행합니다. 날짜 상자를 클릭하면 드롭 다운에서 날짜를 변경할 수 있으며 그에 따라 날짜 상자가 변경되며 ThisDate에 바인딩 된 상단의 텍스트 영역도 변경됩니다. 이제 Next 또는 Prev 버튼을 클릭하십시오. 바운드 ThisDate 텍스트 만 변경되며 날짜 상자는 변경되지 않습니다. 날짜 상자는 ThisDate에 바인딩되어 있으므로 변경해야합니다.

ui-date datepicker가 모델의 변경 사항을 ThisDate에 등록하지 않는 이유에 대한 아이디어가 있으십니까?

Plunker here.

답변

0

그것은 날짜 객체 변화를보고 아니에요. 새 날짜 개체를 할당하면 작동합니다.

function DateOffset(ThisDate, NumDays) { 
    var d = new Date(); 
    d.setTime(ThisDate.getTime() + (NumDays * 1000 * 60 * 60 * 24)); 
    return d 
} 
+0

완벽했습니다. 왜 작동하는지 설명해 주시겠습니까? 나는 네가 왜 일하는 지 이해하지 못하고 내 것도하지 않는다. $ scope를 DateOffset() 함수에 전달되어야하는 "new Date()"로 설정했습니다. 하지만 당신은 함수에서 새로운 Date() 객체를 설정하고 있습니다. 차이점은 무엇입니까? 다시 한 번 감사드립니다! –

+0

범위와 관련이 있습니다. 컨트롤러에서 새 Date()를 만들면이 날짜가 DateOffset 함수 내에서 만들어집니다. 각도가 Date 객체 내의 필드가 아니라 Date 객체의 변경을 찾고있는 것 같습니다. 이 기사는 몇 가지 세부 사항을 제공 할 수 있습니다 : http://teropa.info/blog/2014/01/26/the-three-watch-depths-of-angularjs.html – bwobbones

관련 문제