我有一个很长的计算表格,想预先填写一些值来显示初始结果。这些初始值应该存在于模板中以使它们易于编辑。看来,角度方式是使用读取输入值字段并使用这些值初始化应用程序的指令。
这是从输入字段设置模型值的一种方法:
<input name="card[description]" value="Visa-4242" ng-model="card.description" ng-initial>
咖啡脚本:
app = angular.module 'forms', []
app.directive 'ngInitial', ->
restrict: 'A'
controller: ['$scope', '$element', '$attrs', '$parse', ($scope, $element, $attrs, $parse) ->
val = $attrs.sbInitial || $attrs.value
getter = $parse($attrs.ngModel)
setter = getter.assign
setter($scope, val)
]
来源:Angular js init ng-model 从默认值
不幸的是,这在我的应用程序中不起作用。显示值但不计算结果。我必须手动填写浏览器中的字段才能开始计算。
在我的控制器中监视输入字段,如下所示:
$scope.$watch(
'inputValues.permeatCapacity',
function (newValue, oldValue) {
if (newValue === oldValue) {
return;
}
permeatCapacity = $scope.inputValues.permeatCapacity;
permeatPerDay = permeatFactory.getPermeatPerDay(permeatCapacity);
$scope.permeatPerDay = $filter('number')(permeatPerDay, 2);
}
);
解决这个问题的最佳指令是什么,或者 Angular.js 中是否有更好的方法?
更新
我刚刚在控制器中发现了一种非常肮脏的方式来在初始化后使用绑定计算来更新输入字段。这不仅感觉是个坏主意,而且初始值也不存在于模板中:
$timeout(function () {
$scope.inputValues.overallRecovery = 40;
$scope.inputValues.permeatCapacity = 7.2;
}, 0);
相比之下,我的控制器中的这个初始对象填写了字段,但不会触发观察者(对于绑定计算很重要):
$scope.inputValues = {
overallRecovery: 40,
permeatCapacity: 7.2
};
但是有更好的方法来做到这一点,不是吗?