I created a naive example of a map-sheet directive without seeing any of your code, and I switched the map display through ng-show. It works without any $ timeout. It is difficult to diagnose where your problems arise without seeing any code or not knowing how you are trying to switch the map display.
angular.module('demo', []) .directive('leafletMap', function() { return { restrict: 'E', scope: { mapOptions: '&' }, template: '<div><button ng-click="toggleShow()">Toggle Map</button><div class="demo-map" ng-show="isShown"></div></div>', link: function(scope, elem, attrs) {
.demo-map { height: 500px; }
<script src="//cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js"></script> <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <link rel="stylesheet" href="//cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" /> <div ng-app="demo" ng-controller="DemoController as ctrl"> <leaflet-map map-options="ctrl.mapOptions"></leaflet-map> </div>
source share