3

我对 Angular 很陌生,遇到了一个小问题。我有这个简单的 datepicker 指令,它有效

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/> 

我希望能够更改 datepicker 调用的 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-click 来激活给定元素上的日期选择器,我想出了一个丑陋的解决方法,但如果可能的话,我想学习如何使其工作。谢谢!

4

1 回答 1

3

你可以这样检查:

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

甚至:

if( typeof scope[attr["datepicker"]] === "function" ){ // Instead of `scope` 
    // ...                                             // may be any other object,
}                                                      // `window` for example
于 2013-09-03T17:08:28.120 回答