4

角度ディレクティブで複数の日付ピッカーを使用しましたが、 1つのliを削除すると、ディレクティブにidが設定されないため、この日付ピッカーのインスタンスデータが見つかりませんというエラーが発生します。

directive.js

app.directive('datepicker', function () {
  return {
    link: function($scope, element, attrs) {
    setTimeout(function() {
            $("#"+attrs.id).live('focus',function(){
                console.log(attrs.id);
             });
     });
   }
}

index.html

<tr ng-repeat="payment in invoice.payment" id="payment">
    <td>
        <input class="payment_date" id="{{$index}}" placeholder="Payment Date" type="text" ng-model="payment.date" datepicker/>
        <br />
    </td>
</tr>

どうすればdirective.jsにIDを設定できますか?

4

3 に答える 3

1

ディレクティブでIDを「取得」(「設定」ではなく)できる時期を知りたいと思います。その方法は次のとおりです。

app.directive('datepicker', function () {
  return {
    link: function($scope, element, attrs) {
      element.bind('focus', function (){
        console.log(attrs.id);
      });
    }
  };
});
于 2013-02-12T16:45:43.010 に答える
0

http://docs.angularjs.org/guide/directive#Attributesを確認する必要があります。リンク段階では、まだ定義されていません。

elementまた、リンク関数でイベントをアタッチするだけなので、IDセレクターを使用する必要はないと思います。

于 2013-02-12T09:28:33.620 に答える
0

AngularUIの使用を検討しましたか?次に、独自のディレクティブを作成せずにJQueryパススルーを使用できます(使用する場合に備えて、例としてui-optionsも追加しました)。これがどのように見えるかです:

<input class="payment_date" ui-jq="datepicker" ui-options="{dateFormat:'dd-mm-yy'}" placeholder="Payment Date" type="text" ng-model="payment.date" />

IDを付けるのはなぜ必要なのかわかりません。これを行う代わりに、選択した日付の値を取得する場合:

var myDate = $("#"+myIndex).val();

これを行う必要があります:

var myDate = invoice.payment[myIndex].date;

これがAngularの美しさであり、ここでDOMを使用する必要はありません。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-02-12T14:03:09.757 に答える