サードパーティのライブラリをカプセル化するディレクティブを作成しようとしています。私のディレクティブは次のようになります。
angular.module('MyApp').directive("shareButton", [function() {
return {
link: function($scope, elem, attrs ) {
stWidget.addEntry({
"service": attrs.service,
"element": elem[0],
"url": attrs.shareUrl,
"title": attrs.shareTitle,
"type": attrs.type || "chicklet",
"text": attrs.displayText || "",
"image": attrs.shareImage
});
}
};
}
そして、使用法は次のようになります。
<a href="#" share-button
type="chicklet"
service="facebook"
share-url="{{shareUrl}}"
share-title="{{shareTitle}}"
share-image="{{shareImage}}"></a>
問題が発生するのは、{{ someValue }}
バインディングを使用する場合です。ディレクティブでのlinkメソッドの呼び出し中に、これらの値はnullとして渡されます。これらの値を取得するには、を使用する必要がありますattrs.$observe()
。問題は、私が使用しているサードパーティのライブラリには、を呼び出した後にこれらの値を変更する方法がまったくないことですstWidth.addEntry()
。私は彼らのコードをたくさん分析しました、そして彼らは私がそれらの値を変更できないことを確認するためにクロージャとローカル変数を使用します。
したがって、サードパーティのライブラリについては、書き直す以外に何もできません。そのため、stWidget.addEntry()
すべての値が得られるまでそのメソッドの呼び出しを遅らせるために、Angularで何ができるかという質問があります。attrs.$observe()
または、メソッドを使用する必要のないバインディングの形式はありますか?
変更をバインドする必要はありません。この場合、単純な1回限りのバインディングで十分です。