This is the error. “No instance found for handle left”. I’ve been allowing it to run rampant there for a while now due to tight schedule. Now that there’s a bit of extra time.. Let’s murder it.
white line
Sniffing Around
Tracing the error in console, it’s triggered by this line of code:
$mdSidenav('left').close();
Logging $mdSidenav out, we could trace back to this function:
return function(handle) {
var self;
var errorMsg = "SideNav '" + handle + "' is not available!";
var instance = $mdComponentRegistry.get(handle);
if(!instance) {
$mdComponentRegistry.notFoundError(handle);
}
return self = {
isOpen: function() {...},
isLockedOpen: function() {...},
toggle: function() {...},
open: function() {...},
close: function() {...},
then : function( callbackFn ) {...}
};
};
My guess is that the instance hasn’t initialised yet upon the close() call. And looking at the definition of notFoundError, bingo:
notFoundError: function(handle) {
$log.error('No instance found for handle', handle);
}
Strangely, there isn’t a method to check if an instance of mdSidenav has initialised or not without puking error logs all over the place. There is however, a way to work around it. At the bottom of the $mdSidenav function, after returning the self object, these lines of code innocently sit there:
/**
* Deferred lookup of component instance using $component registry
*/
function waitForInstance() {
return $mdComponentRegistry
.when(handle)
.then(function(it){
instance = it;
return it;
});
}
Make good use of them.
Solution
Use this instead:
$mdComponentRegistry.when('left').then(function(leftSidenav){
leftSidenav.close();
});
