使用angularjs调用普通javascript

call normal javascript using angualrjs

本文关键字:javascript 调用 angularjs 使用      更新时间:2023-09-26

我正在尝试将用于联盟跟踪的遗留javascript代码包含到angularjs应用程序中

<script type="text/javascript">
        //<![CDATA[ 
        /*** Do not change ***/
        var AWIN = {};
        AWIN.Tracking = {};
        AWIN.Tracking.Sale = {};
        /*** Set your transaction parameters ***/
        AWIN.Tracking.Sale.amount = '{{order_total}}';
        AWIN.Tracking.Sale.orderRef = '{(order_id}}';
        AWIN.Tracking.Sale.parts = '{{cats}}';
        AWIN.Tracking.Sale.voucher = '';
        AWIN.Tracking.Sale.currency = 'GBP';
        AWIN.Tracking.Sale.test = '0';
        AWIN.Tracking.Sale.channel = 'aw';
        //]]>
    </script>

我需要调用上面的代码(用语言变量填写占位符),然后调用这个:

    <script src="https://www.dwin1.com/xxxx.js" type="text/javascript" defer="defer"></script>

最好的方法是什么?我曾尝试将代码放入Angular函数中,但没有成功。我还尝试将vars向下传递到$window中,并尝试将它们插入我端的CDATA中,但也没有成功。有什么想法吗?


我应该将此代码添加到一个HTML页面中,该页面包装在一个angualjs控制器

您正在尝试的内容不可能直接使用angularjs。你需要做一些类似下面的事情

//Note: this is a new JS file included in your main html
(function() {
    "use strict";
    window.AWIN = {};
    window.populateAwin = function(args) {
        //<![CDATA[ 
        /*** Do not change ***/
        AWIN.Tracking = {};
        AWIN.Tracking.Sale = {};
        /*** Set your transaction parameters ***/
        AWIN.Tracking.Sale.amount = args.order_total;
        AWIN.Tracking.Sale.orderRef = args.order_id;
        AWIN.Tracking.Sale.parts = args.cats;
        AWIN.Tracking.Sale.voucher = '';
        AWIN.Tracking.Sale.currency = 'GBP';
        AWIN.Tracking.Sale.test = '0';
        AWIN.Tracking.Sale.channel = 'aw';
        //]]>
    }
}());

然后,您需要通过传递如下所示的所需数据,从控制器调用此函数

populateAwin({
   order_total: $scope.order_total,
   order_id: $scope.order_id,
   cats: $scope.cats
});

完成后,您可以从控制器中动态地包含脚本,如下所示

var scriptEl = document.createElement("script");
scriptEl.type = "text/javascript";
scriptEl.defer = "defer";
scriptEl.src = "https://www.dwin1.com/xxxx.js";
document.body.appendChild(scriptEl);