我正在尝试制作一个 Twitter 分享按钮指令,该指令会根据父模型进行更改
app.directive('twitterShare', function() {
return {
restrict: 'A',
template: "<a href=\"https://twitter.com/share\" data-count=\"none\" class=\"twitter-share-button\" data-text=\"{{text}}\" data-lang=\"pt-BR\"></a>",
scope: {
text: '=twitterShare'
},
link: function($scope, $element, $attrs, $model) {
return $scope.$watch('text', function(value) {
//??
});
}
};
});
和指令
<div twitter-share="scopeModel"></div>
$scope.text
正确显示了 my ,$scope.scopeModel
但由于 twitter 用a
iframe 替换了元素,因此元素本身丢失了。我如何在它发生变化时重新创建/重绘,但应用某种限制,因为重新创建 iframe 很昂贵。
试图将其更改为
app.directive('twitterShare', function($compile, $timeout) {
return {
restrict: 'A',
scope: {
text: '=twitterShare'
},
link: function($scope, element) {
var $element;
$element = "<a href=\"https://twitter.com/share\" data-count=\"none\" class=\"twitter-share-button\" data-text=\"{{text}}\" data-lang=\"pt-BR\"></a>";
$scope.$watch('text', function(value) {
if (value != null) {
$timeout(function() {
element.html($compile($element)($scope));
typeof twttr !== "undefined" && twttr !== null ? twttr.widgets.load() : void 0;
});
}
});
}
};
});
但是第二次$watch
'ed 模型更改时,{{text}}
占位符不会更新。另一个奇怪的事情是,每次scopeModel
更改时,$$watchers
对象都会不断增加。