我試圖構建一個指令來封裝第三方庫。我的指令可能類似於以下內容:集成Angularjs指令和第三方小部件
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 }}
結合。在指令的鏈接方法調用期間,這些值將作爲null傳遞。要獲得這些值,您必須使用attrs.$observe()
。問題是我使用的第三方庫在調用stWidth.addEntry()
後絕對沒有辦法修改這些值。我已經完成了大量的代碼分析,他們使用閉包和局部變量來確保我無法更改這些值。
所以我不能做任何關於第三方庫,除了重寫它,所以我的問題是我可以用Angular做什麼,以延遲調用stWidget.addEntry()
方法,直到我有所有的值。還是有一種綁定形式,不必使用attrs.$observe()
方法?
我不在乎綁定的變化。在這種情況下,簡單的一次性綁定就足夠了。
儘管這在技術上的作品,因爲我周圍AngularJS工作感覺哈克。但是,代碼中的副作用比其他建議少。 – chubbsondubs 2013-03-26 05:30:31
會發現這是一個通用的解決方案。只是讓瀏覽器有機會趕上編譯過程 – charlietfl 2013-03-26 10:26:37