[angularjs] ng-change는 새로운 가치와 원래 가치를 얻습니다.

풀다운에서 값을 선택하기 위해 ng-options를 사용하고 있습니다. 이전 값과 새 값을 비교할 수 있기를 바랍니다. ng-change는 풀다운의 새 값을 잡는 데 잘 작동하지만 새 값과 원래 값을 모두 얻을 수있는 방법은 무엇입니까?

<select ng-change="updateValue(user)" ng-model="user.id" ng-options="user.id as user.name for user in users"></select> 

예를 들어, 컨트롤러가 “이전 user.name은 BILL이고 현재 사용자 이름은 PHILLIPE입니다.”라고 기록하기를 원한다고 가정 해 보겠습니다.



답변

각도 {{expression}}을 사용하여 이전 사용자 또는 user.id 값을 ng-change 속성에 리터럴 문자열로 추가 할 수 있습니다.

<select ng-change="updateValue(user, '{{user.id}}')" 
        ng-model="user.id" ng-options="user.id as user.name for user in users">
</select>

ngChange에서 updateValue에 대한 첫 번째 인수는 새 사용자 값이되고, 두 번째 인수는 이전 user.id 값을 사용하여 angular에 의해 마지막으로 선택 태그가 업데이트되었을 때 형성된 리터럴이됩니다.


답변

또한 사용할 수 있습니다

<select ng-change="updateValue(user, oldValue)"     
       ng-init="oldValue=0"
       ng-focus="oldValue=user.id"
       ng-model="user.id" ng-options="user.id as user.name for user in users">
</select>


답변

ng-change = someMethod ({{user.id}})와 같은 것을 사용할 수 있습니다. 측면 {{expression}}에 값을 유지하면 식을 인라인으로 평가하고 현재 값 (ng-change 메서드가 호출되기 전의 값)을 제공합니다.

<select ng-model="selectedValue" ng-change="change(selectedValue, '{{selectedValue}}')">


답변

변경 될 때마다 업데이트하는 currentValue 변수를 컨트롤러에 유지하기 만하면됩니다. 그런 다음 업데이트하기 전에 매번 새 값과 비교할 수 있습니다. ‘

시계를 사용한다는 생각도 좋지만 간단한 변수가 가장 간단하고 논리적 인 해결책이라고 생각합니다.


답변

스코프 시계를 사용할 수 있습니다.

$scope.$watch('user', function(newValue, oldValue) {
  // access new and old value here
  console.log("Your former user.name was "+oldValue.name+", you're current user name is "+newValue.name+".");
});

https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch


답변

대신 시계를 사용할 수 있습니다. 이전 값과 새 값이 있기 때문에 다이제스트주기에 추가됩니다.

컨트롤러에 두 번째 변수를 유지하고 설정합니다.


답변