如何在Angular JS中访问指令参数?

时间:2013-09-03 16:41:22

标签: angularjs angularjs-directive

我对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激活给定元素上的日期选择器来提出一个丑陋的解决方法,但我想学习如何在可能的情况下使其工作。谢谢!

1 个答案:

答案 0 :(得分: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