Javascript 从<;生成的html调用.ts文件中的函数;脚本>;
从Javascript 从<;生成的html调用.ts文件中的函数;脚本>;,javascript,html,angular,Javascript,Html,Angular,从生成后,我正在尝试从html调用doThis()函数 因为它是一个运行外部url的脚本,所以我需要使用.ts文件中的变量添加它。它毫无问题地执行并创建我的html元素。该html元素是一个付款表单,当它完成时,它调用位于中的函数,并将订单信息作为参数提供给我 我这里的问题是,我试图从该html函数调用.ts文件中的一个函数来使用该订单信息,但我找不到从html内部引用该.ts函数的方法 .ts文件 export class Component implements OnInit {
生成后,我正在尝试从html调用doThis()
函数
因为它是一个运行外部url的脚本,所以我需要使用.ts文件中的变量添加它。它毫无问题地执行并创建我的html元素。该html元素是一个付款表单,当它完成时,它调用位于中的函数,并将订单信息作为参数提供给我
我这里的问题是,我试图从该html函数调用.ts文件中的一个函数来使用该订单信息,但我找不到从html内部引用该.ts函数的方法
.ts文件
export class Component implements OnInit {
giftupHtml: string = `<script type="text/javascript">
(function (g, i, f, t, u, p, s) {
g[u] = g[u] || function() { (g[u].q = g[u].q || []).push(arguments) };
p = i.createElement(f);
p.async = 1;
p.src = t;
s = i.getElementsByTagName(f)[0];
s.parentNode.insertBefore(p, s);
})(window, document, 'script', 'https://cdn.giftup.app/dist/gift-up.js', 'giftup');
// Track conversions:
giftup("conversion", function (payload) {
doThis();
});
</script>
`;
constructor( ) { }
doThis() {
console.log("This isn't called.");
}
导出类组件实现OnInit{
giftupHtml:字符串=`
(函数(g,i,f,t,u,p,s){
g[u]=g[u]| |函数(){(g[u].q=g[u].q | |[]).push(参数)};
p=i.createElement(f);
p、 异步=1;
p、 src=t;
s=i.getElementsByTagName(f)[0];
s、 parentNode.insertBefore(p,s);
})(窗口,文档,'脚本','https://cdn.giftup.app/dist/gift-up.js","礼物",;
//轨道转换:
giftup(“转换”,函数(有效载荷){
doThis();
});
`;
构造函数(){}
doThis(){
log(“这不是调用的。”);
}
基本上,giftupHtml用作内部的[innerHTML]。
它呈现得很好,我知道调用了html函数,因为我可以控制台.log(有效负载),但我不能引用我的.ts文件或函数。实际上这很正常,您正在尝试从脚本窗口访问角度函数。您无法正常访问,但有一些解决方法
但我真的很感兴趣的是你为什么要这样做?事实上这很正常,你试图从脚本窗口访问角度函数,你不能正常地这样做,但有一些解决办法
但我真的很感兴趣的是,你这么做的原因是什么?你在Angular zone之外调用的任何东西都需要包装在来自ngZone的调用中。并且确保你使用箭头函数,以便对它的引用保留为组件
constructor(ngZone: NgZone) {
window['doThis'] = () => {
ngZone.run(() => {
// Now you have full access to the component here
});
};
}
ngOnDestroy() {
delete window['doThis'];
}
在Angular zone之外调用的任何东西都需要包装在来自ngZone的调用中。请确保使用箭头函数,以便对该区域的引用保留为组件
constructor(ngZone: NgZone) {
window['doThis'] = () => {
ngZone.run(() => {
// Now you have full access to the component here
});
};
}
ngOnDestroy() {
delete window['doThis'];
}
谢谢你的链接!我正在网站上集成一个第三方表单,我无法访问它的值,因为它是一个iframe(来自另一个域)。因此,当流程完成时,他们会调用一个函数,让我访问订单的有效负载。由于我们跟踪我工作的分析,我们希望调用一个函数,将部分有效负载发送给分析。您能接受它作为正确答案吗?如果它对您有所帮助,请提前感谢这是一个相当新的问题,因此我将稍等,看看re是一个更好的答案。谢谢你的链接!我正在网站上集成一个第三方表单,我无法访问它的值,因为它是一个iframe(来自另一个域)。因此,当流程完成时,他们会调用一个函数,让我访问订单的有效负载。由于我们跟踪我工作的分析,我们希望调用一个函数,将部分有效负载发送给分析。您能接受它作为正确答案吗?如果它对您有所帮助,请提前感谢这是一个相当新的问题,因此我将稍等,看看re是一个更好的答案。在你的构造函数中,window.doThis=this.doThis.bind(this);
说属性doThis在类型window上不存在。window[“doThis']会做这个把戏吗?这意味着在你的构造函数中同样的事情,window.doThis=this.doThis.bind(this);
说属性doThis在类型window上不存在。will window[”这能起作用吗?意思是一样的