Javascript $routeProvider异步不工作
我正在用USB设备构建一个chrome应用程序。在我的主app.js中,我希望在添加/删除设备和更改url时始终进行检查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
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现在检查一下