Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs控制器中的函数仅在两次调用[Phonegap app]时调用_Javascript_Angularjs_Cordova_Controller - Fatal编程技术网

Javascript angularjs控制器中的函数仅在两次调用[Phonegap app]时调用

Javascript angularjs控制器中的函数仅在两次调用[Phonegap app]时调用,javascript,angularjs,cordova,controller,Javascript,Angularjs,Cordova,Controller,我正在用angularJS制作一个phonegap应用程序,我的一个控制器中有一个函数有问题 我的控制器如下所示: function NavCtrl($scope,navSvc) { $scope.slidePage = function (path,type) { navSvc.slidePage(path,type); }; $scope.back = function () { navSvc.back(); };

我正在用angularJS制作一个phonegap应用程序,我的一个控制器中有一个函数有问题

我的控制器如下所示:

function NavCtrl($scope,navSvc) {

    $scope.slidePage = function (path,type) {
        navSvc.slidePage(path,type);
    };

    $scope.back = function () {
        navSvc.back();
    };

    $scope.scan = function(){
        console.log('scan(): init');
        var scanner = window.cordova.require("cordova/plugin/BarcodeScanner");

        scanner.scan(
            function (result) {
                if(result.cancelled == 1){
                    console.log("Scanner cancelado");
                }else{
                     console.log("scanner ok: " + result.text);
                     $scope.goTo(result.text); // /products/see/result.text
                }

            },
            function (error) {
                alert("Scanning failed: " + error);
            }
        );

    }

    $scope.goTo= function(barcode){
        console.log("Lets go to product " + barcode);
        $scope.slidePage('/products/see/'+barcode);
    }}
前两个函数是产生页面转换效果的函数。 Scan功能是打开phonegap条形码扫描仪插件(并正常工作)的功能,最后一个goTo功能是更改视图的功能

期望的行为是,当有人打开条形码扫描时,用户将被重定向到与该扫描相关的产品。奇怪的是,当我扫描某个东西时,扫描函数中的控制台日志正常工作(它实际上说:Scanner ok:58746987),但没有进行页面更改。但是,如果我再次打开条形码(因此我再次调用扫描功能),我会看到控制台日志(“当XXX是之前扫描的正确条形码时,让我们转到产品XXX”)被触发,即使我没有第二次扫描任何东西,goTo功能也会通过调用扫描功能触发

是我试验过的奇怪的东西。这些函数工作正常,但我需要调用扫描两次才能完成重定向

我也尝试过观察作用域和根作用域内的变量,但行为是相同的


有什么提示吗?提前感谢。

像这样使用第三方库时,您需要手动告诉Angular发生了什么变化

从:

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

因此,请替换:

$scope.goTo(result.text);
与:


您可以试试:$scope.$apply(函数(){$scope.goTo('123');});你说的是内部反成功扫描功能?我的意思是:success->$scope.apply(function(){$scope.goTo('123');});是吗?是的,在“console.log(“scanner ok:+result.text”);”之后。它起作用了。非常感谢您的帮助:)很好,很高兴我能帮助:)将添加它作为答案。
$scope.$apply(function () {
    $scope.goTo(result.text);
});