angularjs promise和外部braintree.js脚本在html完成加载之前没有得到值

时间:2015-12-11 18:57:12

标签: javascript angularjs braintree

我必须使用外部braintree.js脚本才能生成付款小部件。 我无法控制这一点。这是我的.html页面中的代码:

<div id="myClient" ng-show="false">{{myClientToken}}</div>
<form id="checkout" action="actionURL" method="post" enctype="multipart/form-data">
  <div id="payment-form"></div>
  <input type="hidden" name="amount" value="{{balance}}" />
  <input type="hidden" name="uuid" value="{{uuid}}" />
  <input type="hidden" name="ptype" value="custom" />

  <input type="submit" id="paypal" value="Pay Now">
  <!--form not shown to the user-->
</form>
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
<script>
  $(document).ready(function() {
    var clientToken = $('#myClient').html();
    braintree.setup(clientToken, "dropin", {
      container: "payment-form"
    });
  });
</script>

在我的控制器中,我从REST服务器成功生成令牌:

            myFactory.getToken()
              .then(function(token) {
                  $scope.myClientToken = token.data;

但是,正如您所料,html加载的速度比令牌返回控制器的速度快。

这显然会导致“配置错误”错误,因为braintree.js脚本需要在调用它时不会获得的令牌。

我在div上尝试了ng-init和ng-if,但无济于事。

1 个答案:

答案 0 :(得分:0)

检索令牌后启动braintree。

myFactory.getToken()
    .then(function(token) {
         $scope.myClientToken = token.data;
         return token.data;
     }) .then(function (clientToken) {
         braintree.setup(clientToken, "dropin", {
         container: "payment-form"
         });
     };