7

我做了很多解决方法,搜索和研究,但我不知道如何实现我的目标。

- 问题:

  • 我有以下情况,我想避免用户可以在合同中重叠佣金日期。当用户添加新的佣金时,我们会显示一个列表,其中包含使用 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;
        };
    }

我将发布这项研究的进展。

如果有人可以提供帮助或分享任何想法,我将不胜感激

回头见!

4

1 回答 1

1

你有没有试过在你的指令中传递这个函数,比如“&”参数?

像那样:

App.directive('myDirective', function(){
return {
    scope: {
        myFc: '&'//if the name of parameter is the same in html if not use '&nameOfParameter'
    },

    link: function($scope, $el, $attr){
        $el.bind('click', function(value){
            $scope.myFc(value)
        })
    }
}

})

于 2013-10-22T14:30:16.117 回答