我做了很多解决方法,搜索和研究,但我不知道如何实现我的目标。
- 问题:
- 我有以下情况,我想避免用户可以在合同中重叠佣金日期。当用户添加新的佣金时,我们会显示一个列表,其中包含使用 ngRepeat 生成的添加的佣金,这有用户可以编辑日期的困难。在合同部分,这不是问题,因为要编辑合同,您必须转到其他屏幕进行编辑,日期不能在同一视图中修改。
- 我感到困惑的地方:
- 当我编辑添加的佣金时,我必须将其与之前添加的其他佣金进行比较,因此,我想要一个列表,其中定义了佣金的所有日期,并且可以在指令中说,为功能开票返回一个包含所有日期的列表,不包括我正在编辑的委员会的日期。
-我希望如何解决它:
- 我想做这样的事情:
<input type="text" name="newComission_dateFrom" ng-model="newCommission.from" notincluded=myFunction({{$index}})/>
函数 myFunction 将遍历包含所有 addedCommissionsDates 的列表,并将其与所有日期范围进行比较,除了包含在 addedCommissionsDates[index] 中的范围。
目标是可以在不使用隔离范围的情况下评估属性中的表达式。
我对孤立的范围有很多问题,我同意这篇文章:
在编写指令时,我如何决定是否需要不需要新的作用域、新的子作用域或新的隔离作用域?.
编辑 我正在查看 ngRequire 是如何实现的,因为 ngRequire 可以接受 ng-require="aFunction()",所以我在指令中使用 $parsers 实现了这个目标。所以,我现在可以执行一个函数了! 我使用它取得了一些进展,但我想在我的指令中执行函数的结果,我想达到这样的结果
rangeToEval = //我的函数或表达式的结果。
看看有 ngRepeat 的东西,我不知道返回这个函数的值在什么范围内
if(attrs.notincluded) {
var notIncludedValidator = function(value) {
ngModelCtrl.$setValidity('notincluded', !attrs.notincluded);
return value;
};
}
一切都很好,因为我使用的是布尔值,但是,我想使用一个列表,它是在notincluded属性中执行表达式的结果
//这个输入是ng-repeat的一部分
<input type="text" ng-model="commission.date" ng-required="true" notincluded="filterDatesFn({{$index}})" />
我的控制器中有这个功能:
$scope.filterDatesFn = function(index) {
// in this list, we will add the dates of the defined commissions
if($scope.addedCommisionsDate) {
var listToEvalue= [];
for ( var i = 0; i < $scope.addedCommisionsDate.length; i++) {
if(i != index) {
listToEvalue.push($scope.addedCommisionsDate[i]);
}
}
return listToEvalue;
}
};
所以我的下一个目标是可以更改为:
if(attrs.notincluded) {
var notIncludedValidator = function(value) {
--put the listToEvalue here and do my comparations and validate or invalidate the form in base of the comparation That I do here.
return value;
};
}
我将发布这项研究的进展。
如果有人可以提供帮助或分享任何想法,我将不胜感激
回头见!