我注意到,有关这个问题的大多数问题是关于角度的替代jQuery $(document).ready
函数,这是angular.element($document).ready
然而我想要一个可测试/最佳实践的替代方案对此。替代angular.element(文档)。已经
我目前正在注入Bing地图,它需要在执行我的控制器中的代码之前加载。
目前我包裹控制器代码文件准备:
angular.element($document).ready(function() {
self.map = new Microsoft.Maps.Map(document.getElementById('map'), {
credentials: $scope.credentials,
enableClickableLogo: false,
enableSearchLogo: false,
showDashboard: false,
disableBirdseye: true,
allowInfoboxOverflow: true,
liteMode: true,
minZoom: 2
});
$scope.$watch('zoom', function (zoom) {
self.map.setView({animate: true, zoom: zoom});
});
if ($scope.onMapReady) {
$scope.onMapReady({ map: self.map });
}
});
其中一期工程,但我无法测试,所以我认为这是不正确的使用。 我试着在指令中设置一个变量$scope.loaded = true;
,因为我知道如果指令链接函数被击中,DOM必须被加载。然后我试着用替换文档准备:
$scope.$watch('loaded', function() {
self.map = new Microsoft.Maps.Map(document.getElementById('map'), {
credentials: $scope.credentials,
enableClickableLogo: false,
enableSearchLogo: false,
showDashboard: false,
disableBirdseye: true,
allowInfoboxOverflow: true,
liteMode: true,
minZoom: 2
});
if ($scope.onMapReady) {
$scope.onMapReady({ map: self.map });
}
});
$scope.$watch('zoom', function (zoom) {
self.map.setView({animate: true, zoom: zoom});
});
的“加载”腕表作品如预期,但自然变焦被击中负荷,多数民众赞成设置地图前。我觉得我可以在文件准备更改为$timeout
功能,但是,这似乎是一种解决方法,而不是正确的解决方案,是有一个最佳实践的替代angular.element($document).ready
,在相同的方式工作,但是让我来测试它成功的内容是什么?
这段代码的上下文是什么?当文档准备就绪时,通常应该引导Angular应用程序,所以这个包装器在控制器内至少是无用的。 – estus
@estus bing地图被调用如下:''which一旦加载,我们就可以访问上面的代码片段中的'Microsoft',这显然需要足够长的时间才能在doc中的控制器中存在 – gardni
请提供一种将问题复制为小提琴/ plunk的方法,如果可能的话不暴露您的API钥匙什么的。一般来说,答案是'你应该只用angular.bootstrap准备好一次',所以这些都是关于与特定脚本交互的。如果此API上有事件可以连接以确保它已准备就绪,请考虑使用它们。 – estus