使用指令将小部件集成到有角度的应用程序中
Integrating widget into a angular app using a directive
所以我目前已经将Yotpo的"评论和评论"集成到我的Angular应用程序中。
它由一个javascript小部件和一些Html:组成
Js:
var e=document.createElement("script");
e.type="text/javascript",
e.async=true,
e.src="//staticw2.yotpo.com/API/widget.js",
e.id="test";
var t=document.getElementsByTagName("script")[0];
t.parentNode.insertBefore(e,t);
HTML:
<div class="yotpo yotpo-main-widget"
data-product-id="{{ product.sku }}"
data-name="{{ product.title }}"
data-url="{{ pageUrl }}"
data-image-url="{{ pageImage }}"
data-description="{{ product.description }}">
</div>
通过将JS放入指令中,我已经使其工作,但是,它只有在重新加载页面时才能工作。
为了解决这个问题,我在用户离开页面时删除了脚本,并在用户返回页面时重新插入脚本
示例:
link: function ($scope, elem) {
elem.bind('$destroy', function() {
var widgetScript = angular.element('#foo');
jQuery(WidgetScript).remove();
});
function loadWidget() {
var e=document.createElement("script");
e.type="text/javascript",
e.async=true,
e.src="//staticw2.yotpo.com/API/widget.js",
e.id="foo";
var t=document.getElementsByTagName("script")[0];
t.parentNode.insertBefore(e,t);
}
loadWidget();
}
不幸的是,这不起作用。如有任何建议,我们将不胜感激。
所以我找到了一个解决方案,并想把它发布在这里,因为我相信如果其他人在Angular中使用Yotpo,他们肯定会遇到这个问题。
答案是yotpo.initWidgets();
不幸的是,Yotpo的文件中没有这方面的信息。
所以这就是我最终所做的,它就像一种魅力:
.directive('yotpo', function ($document, $timeout) {
return {
restrict: 'AE',
link: function() {
function loadWidget() {
var e = document.createElement("script");
e.type = "text/javascript",
e.async = true,
e.src = "//staticw2.yotpo.com/API/widget.js",
e.id = "test";
var t = document.getElementsByTagName("script")[0];
t.parentNode.insertBefore(e,t);
}
loadWidget();
if (typeof yotpo !== 'undefined') {
$timeout(function () {
yotpo.initWidgets();
}, 500)
}
}
}
您不需要指令就可以实现这一点。
widget.js脚本使用HTML中的数据属性。您需要确保在加载javascript之前设置了这些数据属性。
我还建议您对属性使用单向绑定。
相关文章:
- 在我的SPA应用程序中集成Facebook共享的问题
- 如何将tesseract OCR与Cordova/Phonegap应用程序集成
- 如何将现有的angular js应用程序集成到Laravel 5中
- 单页应用程序的javascript集成测试
- 如何将ember应用程序集成到json服务器中使用
- 如何将Google Analytics集成到GWT应用程序中
- IBM Filenet如何与Angular应用程序集成
- 将Google Places API与Rails应用程序集成
- 如何将Angular 2应用程序集成到Django应用程序中
- 将登录验证模块与现有的Angular JS应用程序集成
- 将大气层上的中等编辑器与望远镜应用程序集成
- 将 Outlook 与 JS Web 应用程序集成
- 将Javascript函数与Grails应用程序集成
- 如何将Crashlytics与React Native应用程序集成
- 是否有可能/可行将非microsoft REST客户端应用程序集成到Sharepoint 2013 OAuth中以获取R
- 将支付网关与angularjs应用程序集成到spring后端
- 我应该如何在我的应用程序集成谷歌地图
- 初学者问题:如何将processing.js与Rails 3.1应用程序集成
- Facebook, Twitter与Phonegap应用程序集成,无需使用插件
- 将R及其图形与现有的Javascript/HTML应用程序集成