具有许多控件的窗体,它们之间具有交互.比$scope.$watch更清洁的方法
Form with lots of controls with interaction between them. Cleaner approach than $scope.$watch?
我正在构建一个角度应用程序,表单有大约 15 个控件。这是一个金融应用程序。请不要建议分解页面等。
某些控件相互依赖。大约有 5 个输入控件(我们称之为源代码控件),其中任何一个都可以更改并影响 5 个其他控件中的一个或多个(我们称它们为目标控件)。我的结构方式是,我对 5 个源变量中的每个变量都有一个 $scope.$watch,在每个监视函数中,我有一些代码来决定要更新 5 个最远变量中的哪一个并更新它们。其中一款手表的示例如下所示。
$scope.$watch('money.price',function(newVal,oldVal) {
if(newVal != oldVal) {
if($scope.money.quantity != undefined) {
updatePrincipal($scope)
updateFees($scope);
$scope.money.net = $scope.money.principal + $scope.money.fee
}
}
});
我真的不觉得这很优雅。有没有更好/更清洁的方法可以做到这一点?(表单将来只会变得稍微复杂一点,即增加 2-3 个依赖字段,但不会超过此)。
假设你的输入控件附加了一个ng-model,我建议将ng-change添加到每个输入表单中,在那里你可以使用相同的函数一次更新所有范围绑定
利用ng-bind
指令创建的$watch。
<div ng-bind="getMoneyNet()"></div>
OR SIMPLY
{{ getMoneyNet() }}
不要在控制器中创建$watch,而是定义函数。
$scope.getMoneyNet = function() {
if ($scope.money.quantity != undefined) {
updatePrincipal($scope)
updateFees($scope);
$scope.money.net = $scope.money.principal + $scope.money.fee
};
return $scope.money.net;
};
然后,在每个摘要周期中,ng-bind
指令创建的$watch
计算money.net
的值并根据需要更新 DOM。
相关文章:
- 使用$scope方法时的ControllerAs语法
- Angular:如何在状态更改时调用scope方法
- 如何从其他方法访问Angular.js$scope
- 为什么不'我的角度测试$scope上定义了方法
- 在AngularJS中重构$scope操作的更好方法
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- 从同一控制器 Angularjs 中的另一种方法访问$scope变量
- $scope.$on('$routeChangeSuccess'..) 和在 scope 函数中调用方法
- 在指令中使用 $scope.$watch 处理未定义变量的替代方法
- 检查会话存储并将变量传递给 Angular 中的$scope的正确方法
- Angular 的控制器方法如何使$scope可用于我的函数参数
- 在 Angular.js 中更改视图时处理$scope状态和值的正确方法是什么?
- 具有许多控件的窗体,它们之间具有交互.比$scope.$watch更清洁的方法
- AngularJS在方法之外访问$scope
- 如何在 $scope.$watch 方法中比较 oldVal 和 newVal
- AngularJs Jasmine 无法在方法$rootScope中调用$scope方法
- AngularJS:如何将服务方法分配给控制器$scope和ng-repeat(it)
- 从AngularJS中的服务获取数据后,如何更新$scope是最好的方法
- 如何使用Angular 1.5 component()方法将scope设置为false
- 为什么是$scope$这里需要apply()来进行简单的删除,以及'这是推荐的方法(因为有了它,就会抛出一个错误