在AngularJS中评估指令属性中的表达式

时间:2013-10-02 03:02:59

标签: javascript angularjs angularjs-directive

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

- 问题:

  • 我有以下情况,我想避免用户可以 在合同中重叠佣金日期。当用户添加新的 佣金,我们会显示一个列表,其中包含已添加的佣金 一个ngRepeat,这有用户可以编辑日期的难度。 在合同部分,这不是问题,因为编辑a 合同,你必须去其他屏幕并编辑它,日期不能 在同一视图中修改。

- 我感到困惑:

  • 当我编辑添加的佣金时,我必须将其与之前添加的佣金进行比较,因此,我想要一个列表,其中定义了佣金的所有日期,并且可以在指令中说明,开具一个函数,该函数返回一个列表,其中包含所有日期,不包括我正在编辑的佣金日期。

- 我希望如何解决它:

  • 我想做这样的事情:

<input type="text" name="newComission_dateFrom" ng-model="newCommission.from" notincluded=myFunction({{$index}})/>

和函数myFunction将迭代包含所有addedCommissionsDates的列表,并将其与所有日期范围进行比较,但additionalCommisionsDates [index]中包含的范围除外。

目标是可以在不使用隔离范围的情况下评估属性中的表达式。

我在隔离范围方面遇到了很多问题,我完成了对这篇文章的同意:

When writing a directive, how do I decide if a need no new scope, a new child scope, or a new isolate scope?


修改 我正在寻找如何实现ngRequire,因为ngRequire可以接受ng-require =“aFunction()”,我在我的指令中使用$ parsers达到了这个目标。 所以,我现在可以执行一个功能了! 我使用它做了一些进展,但是我希望在我的指令中执行该函数的结果,我希望达到这样的目的

rangesToEval = //我的函数或表达式的结果。

查看具有ngRepeat的内容,我无法确定返回此函数的值的范围

if(attrs.notincluded) {
            var notIncludedValidator = function(value) {
            ngModelCtrl.$setValidity('notincluded', !attrs.notincluded);
            return value;
        };
    }

一切正常,因为我使用布尔值,但是,我想使用一个列表,该列表是在未包含

属性中执行expresion的结果

//此输入是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;
        };
    }

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

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

稍后再见!

1 个答案:

答案 0 :(得分:1)

您是否尝试过像'&amp;'这样的功能你的指令中的参数?

像那样:

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)
        })
    }
}

})