得到新值和原始值

我使用 n- 选项从下拉菜单中选择值。我希望能够将旧值与新值进行比较。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”

149299 次浏览

只需在控制器中保留一个 currentValue 变量,以便在每次更改时更新它。然后,您可以在每次更新之前将其与新值进行比较。'

使用手表的想法也不错,但我认为一个简单的变量是最简单和最符合逻辑的解决方案。

You can use a scope watch:

$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

您可以使用一个 watch,因为它具有新旧值,但随后您将添加到摘要周期中。

我会在控制器中保留第二个变量,然后设置它。

使用角度\{\{ 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 值通过 angle 更新 select-tag 时形成的文字。

可以使用类似 ng-change = some Method (\{\{ user.id }})的方法。 通过将您的值保留在旁边\{\{ expression }} ,它将在行内计算表达式并给出当前值(在调用 ng-change 方法之前的值)。

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

你也可以用

<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>

You can always do:

... 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;
}
};