如何从异步回调访问范围

时间:2014-12-20 17:04:28

标签: angularjs asynchronous

看起来非常简单,但我不知道如何从异步函数访问$ scope。 有了以下内容,我将不会尝试使用$ scope.result,直到我手动重新加载选项卡。

.controller('DashCtrl', function ($scope, Camera) {
    $scope.getBarcode = function () {
        cordova.plugins.barcodeScanner.scan(function (result) {
            $scope.result = result.text;
        }, function (error) {
            //alert("Scanning failed: " + error);
        });
    };
}

你能告诉我怎么办吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

在这种情况下,您需要手动触发摘要周期,因为cordova.plugins.barcodeScanner.scan不是Angular方法,因此框架不知道此代码应该更新绑定。在这种情况下,您需要使用$scope.$apply()

自行消化
$scope.getBarcode = function () {
    cordova.plugins.barcodeScanner.scan(function (result) {
        $scope.result = result.text;
        $scope.$apply();
    }, function (error) {
        //alert("Scanning failed: " + error);
    });
};

答案 1 :(得分:1)

您需要将代码包装到$scope.apply的调用中,因为cordova scan函数未与angular集成,因此angular不知道需要重新消化范围并更新页面

function (result) {
  $scope.apply(function () {
    $scope.result = result.text;
  }); 
}