【问题标题】:Braintree Drop in callback and Angular $scope doesn't work回调中的 Braintree Drop 和 Angular $scope 不起作用
【发布时间】:2015-04-24 07:24:10
【问题描述】:

我正在尝试在 Angular 控制器中利用 UI 中的 Braintree Drop。

https://jsfiddle.net/6jmkwode/

function PaymentCtrl($scope) {
    $scope.hasCalledBack = 'Nope';

    braintree.setup('BRAINTREE_KEY',
        'dropin', {
        container: 'dropin',
        onPaymentMethodReceived: function (obj) {
            $scope.hasCalledBack = 'YEP!';
            alert('Did the scope variable change? No? Well it should have....');
        }
    });
}

但是,即使警报触发,回调中的 $scope.hasCalledBack 也不会更改。

【问题讨论】:

    标签: javascript angularjs braintree


    【解决方案1】:

    只需用$scope.$apply() 包装你的回调代码(很好article 关于它):

    ...
    onPaymentMethodReceived: function (obj) {
        $scope.$apply(function() {
            $scope.hasCalledBack = 'YEP!';
            alert('Did the scope variable change? Yes!');
        });
    }
    ...
    

    $apply() 用于从 Angular 框架外部执行 Angular 表达式。 (例如来自浏览器 DOM 事件、setTimeout、XHR 或第三方库)。因为我们正在调用 Angular 框架,所以我们需要执行适当的异常处理范围生命周期,执行 watch。

    查看更新的Demo

    【讨论】:

    • 非常感谢。
    猜你喜欢
    • 2019-05-04
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2015-06-06
    • 2020-01-19
    • 1970-01-01
    相关资源
    最近更新 更多