Javascript angularjs控制器中的函数仅在两次调用[Phonegap app]时调用
我正在用angularJS制作一个phonegap应用程序,我的一个控制器中有一个函数有问题 我的控制器如下所示: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(); };
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);
});