单击按钮后使用 angularJS 获取模型的原始值
Get original values of the model with angularJS after clicking on button
我曾经使用 this.model.changed
或 this.model._previousAttributes
使用 BackboneJS 获取模型的原始值。
我想使用与 angular 相同的功能,通过检测文本字段、复选框设置的模型中的所有更改,而不是像 ng-change
的情况那样在一个文本文本字段中进行检测。
我试图在 form
的 div 中使用它,但没有成功。
我也试过用:
$scope.policyL = savingsDraft.fromServer();
$scope.$watch('policyL', function (oldV, newV) {
});
但是也没用。
我的视图代码示例:
form(role='form', ng-change='changed (policy, newP)' novalidate)
.row
.col-sm-4.form-group
label.control-label Taux de rendement
input.form-control(type='number',
min=0,
max=1,
ng-model='policy.admin.depEarnRate')
.col-sm-4.form-group
label.control-label Frais de contrat
input.form-control(type='number',
min=0,
ng-model='policy.admin.feesIni')
在我的控制器中:
$scope.accept = function () {
$scope.change = function();
};
PS: 我想在点击接受后得到原模型
好吧,您可以在控制器实例化时复制一份。然后,每当触发 $watch 时,将当前模型与副本进行比较。如果不同,从副本中取值。
当您有表格时,最好保留一份原始数据的副本。如果需要,您可以轻松地重置回主副本。
$scope.master = dataModel;
$scope.dataModel = angular.copy($scope.master);
$scope.reset = function () {
$scope.dataModel = angular.copy($scope.master);
$scope.yourForm.$setPristine();
};
然后,如果您真的只想从 master 那里获得更改,我采用了 Backbone 的 changedAttributes
函数并对其进行了修改以适用于我们这里的案例。
var changedAttributes = function(master, diff) {
if (!diff) return false;
var changed = {};
for (var attr in diff) {
var val = diff[attr];
if (!_.isEqual(master[attr], val)) changed[attr] = val;
}
return _.size(changed) ? changed : false;
},
要使用这个:
var changes = changedAttributes($scope.master, $scope.dataModel);
if (changes) console.log("dataModel is different from master");
要在 angular 应用程序中包含下划线,angular-underscore 似乎效果很好。
我曾经使用 this.model.changed
或 this.model._previousAttributes
使用 BackboneJS 获取模型的原始值。
我想使用与 angular 相同的功能,通过检测文本字段、复选框设置的模型中的所有更改,而不是像 ng-change
的情况那样在一个文本文本字段中进行检测。
我试图在 form
的 div 中使用它,但没有成功。
我也试过用:
$scope.policyL = savingsDraft.fromServer();
$scope.$watch('policyL', function (oldV, newV) {
});
但是也没用。
我的视图代码示例:
form(role='form', ng-change='changed (policy, newP)' novalidate)
.row
.col-sm-4.form-group
label.control-label Taux de rendement
input.form-control(type='number',
min=0,
max=1,
ng-model='policy.admin.depEarnRate')
.col-sm-4.form-group
label.control-label Frais de contrat
input.form-control(type='number',
min=0,
ng-model='policy.admin.feesIni')
在我的控制器中:
$scope.accept = function () {
$scope.change = function();
};
PS: 我想在点击接受后得到原模型
好吧,您可以在控制器实例化时复制一份。然后,每当触发 $watch 时,将当前模型与副本进行比较。如果不同,从副本中取值。
当您有表格时,最好保留一份原始数据的副本。如果需要,您可以轻松地重置回主副本。
$scope.master = dataModel;
$scope.dataModel = angular.copy($scope.master);
$scope.reset = function () {
$scope.dataModel = angular.copy($scope.master);
$scope.yourForm.$setPristine();
};
然后,如果您真的只想从 master 那里获得更改,我采用了 Backbone 的 changedAttributes
函数并对其进行了修改以适用于我们这里的案例。
var changedAttributes = function(master, diff) {
if (!diff) return false;
var changed = {};
for (var attr in diff) {
var val = diff[attr];
if (!_.isEqual(master[attr], val)) changed[attr] = val;
}
return _.size(changed) ? changed : false;
},
要使用这个:
var changes = changedAttributes($scope.master, $scope.dataModel);
if (changes) console.log("dataModel is different from master");
要在 angular 应用程序中包含下划线,angular-underscore 似乎效果很好。