我使用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>
例如,让我们说我想让控制器记录,&#34;你以前的用户名是BILL,你当前的用户名是PHILLIPE。&#34;
答案 0 :(得分:258)
使用角度{{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的第一个参数将是新的用户值,第二个参数将是上次更新select-tag时使用旧的user.id值形成的文字。
答案 1 :(得分:13)
您也可以使用
<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>
答案 2 :(得分:12)
只需在控制器中保留currentValue变量,并在每次更改时更新。然后,您可以在每次更新之前将其与新值进行比较。&#39;
使用手表的想法也很好,但我认为一个简单的变量是最简单和最合理的解决方案。
答案 3 :(得分:12)
您可以使用ng-change = someMethod({{user.id}})之类的内容。 通过将您的值保持在{{expression}}边,它将在线计算表达式并为您提供当前值(在调用ng-change方法之前的值)。
<select ng-model="selectedValue" ng-change="change(selectedValue, '{{selectedValue}}')">
答案 4 :(得分:8)
您可以使用示波器手表:
$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
答案 5 :(得分:2)
您可以使用手表,因为它具有旧值和新值,但随后您将添加到摘要周期。
我只是在控制器中保留第二个变量并设置它。
答案 6 :(得分:0)
您可以随时这样做:
... ng-model="file.PLIK_STATUS" ng-change="file.PLIK_STATUS = setFileStatus(file.PLIK_ID,file.PLIK_STATUS,'{{file.PLIK_STATUS}}')" ...
并在控制器中:
$scope.setFileStatus = function (plik_id, new_status, old_status) {
var answer = confirm('Czy na pewno zmienić status dla pliku ?');
if (answer) {
podasysService.setFileStatus(plik_id, new_status).then(function (result) {
return new_status;
});
}else{
return old_status;
}
};