3

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

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 に答える