如何访问Angular JS中的指令参数



我对Angular很陌生,遇到了一个小问题。我有一个简单的日期选择器指令,它可以工作

app.directive('datepicker', function() {
    return {
        require: 'ngModel',
        link: function(scope, elem, attr, ngModel){
        $(elem).datepicker({
            onSelect: function(dateText){
                scope.$apply(function(){
                    ngModel.$setViewValue(dateText);
                });
            }
        });
        }
    }
});

我用来称之为的html

<input datepicker data-ng-model="day.date" readonly/> 

我希望能够更改日期选择器调用的onSelect函数——希望能用这样的方法。

<input datepicker="myOnSelectMethod()" data-ng-model="day.date" readonly/>

然后指令看起来像这个

app.directive('datepicker', function() {
    return {
        require: 'ngModel',
        link: function(scope, elem, attr, ngModel){
            if(myOnSelectMethod is defined){ //how do I access myOnSelectMethod here?
                $(elem).datepicker({
                    onSelect: myOnSelectMethod();
                });
            }
            else{ //proceed as before
                $(elem).datepicker({
                    onSelect: function(dateText){
                        scope.$apply(function(){
                            ngModel.$setViewValue(dateText);
                        });
                    }
                });
            }
        }
    }
});

所以我的问题是:如何从链接函数访问我想要执行的新onSelect函数?

通过查看文档和其他SO问题,这似乎是可能的,但我一直没能做到。我已经想出了一个丑陋的解决方法,使用ng点击来激活给定元素上的日期选择器,但如果可能的话,我想学习如何使其工作。谢谢

您可以通过以下方式进行检查:

if( attr["datepicker"] == "myOnSelectMethod" && 
    typeof myOnSelectMethod === "function" ){
      // ...
}

甚至:

if( typeof scope[attr["datepicker"]] === "function" ){ // Instead of `scope` 
    // ...                                             // may be any other object,
}                                                      // `window` for example

最新更新