Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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 $routeProvider异步不工作_Javascript_Angularjs - Fatal编程技术网

Javascript $routeProvider异步不工作

Javascript $routeProvider异步不工作,javascript,angularjs,Javascript,Angularjs,我正在用USB设备构建一个chrome应用程序。在我的主app.js中,我希望在添加/删除设备和更改url时始终进行检查 angular.module('rfApp', [ 'ngRoute', 'ngMaterial', 'rfApp.view1', 'rfApp.view2', 'rfApp.device_not_found' ]).config(['$locationProvider', '$routeProvider', function($loc

我正在用USB设备构建一个chrome应用程序。在我的主app.js中,我希望在添加/删除设备和更改url时始终进行检查

angular.module('rfApp', [
    'ngRoute',
    'ngMaterial',
    'rfApp.view1',
    'rfApp.view2',
    'rfApp.device_not_found'
]).config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
    $locationProvider.hashPrefix('!');

    function checkForDevices() {
        RFFWHID.getDevices(function(current_devices) {
            if(current_devices.length > 0) {
                $routeProvider.otherwise({redirectTo: '/view1'});
            } else {
                $routeProvider.otherwise({redirectTo: '/device_not_found'});
            }
        });
    }

    chrome.hid.onDeviceAdded.addListener(function(){
        checkForDevices();
    });
    chrome.hid.onDeviceRemoved.addListener(function(){
        checkForDevices();
    });

    checkForDevices();

}]);
但重定向在异步函数中不起作用

编辑:


我发现了类似的问题,第一个答案描述了这是不可能的。但我如何才能解决这个问题。我需要检查usb全局删除/添加,并在此基础上更改视图。

调试很困难,因为我现在没有chrome应用程序的环境,但您可以更改方法。您可以使用$routeChangeSuccess,而不是使用$routeProvider重定向:

angular.module('rfApp')
.factory('deviceManager',($rootScope)=>{
设deviceConnected=false;
chrome.hid.ondeviceaded.addListener(函数(){
checkForDevices();
});
chrome.hid.onDeviceRemoved.addListener(函数(){
checkForDevices();
});
checkForDevices();
返回{
isDeviceConnected:isDeviceConnected
};
函数isDeviceConnected(){
返回装置已连接;
}
函数checkForDevices(){
获取设备(函数(当前设备){
设备连接=当前设备长度>0;
$rootScope.$emit('deviceChange');
});
}    
})
.run($rootScope$location,deviceManager)=>{
$rootScope.$on(“$routeChangeSuccess”,checkandDirect);
$rootScope.$on('deviceChange',checkAndRedirect);
函数checkAndRedirect(){
如果(deviceManager.IsDeviceConnection()){
$location.url(“/view1”)
}否则{
$location.url('/device_not_found');
}
}

});感谢您的回答,但它不起作用:(所以当添加USB设备时,如果(deviceManager.isDeviceConnection()),我应该这样做
if)
然后重定向到视图。@Arti当连接设备时,您可以使用
检查设备
,如果至少有一个设备,您可以使用
isDeviceConnected
检查同步,而不必等待
RFFWHID.getDevices
。很抱歉,我没有机会测试它,这只是一个示例,让您了解它你可以遵循他的方法。顺便说一句,你有任何错误吗?为什么它不起作用?也许我可以改进它。这个问题击中了
$rootScope.$on(“$routeChangeSuccess”
仅在我更改url时更改一次。但当我运行应用程序并删除设备时,它会触发
chrome.hid.ondeviceremove
并且我的url应该更改。您可以测试任何异步function@Arti现在检查一下