【发布时间】:2016-05-02 14:15:22
【问题描述】:
我想使用角度指令嵌入谷歌地图。指令模板运行回调initMap,它应该调用作用域initMap 并创建它,但出现错误:
InvalidValueError: initMap 不是函数
如何从指令的 HTML 模板调用指令回调?
显示地图的父 html 文件:
<my-map></my-map>
指令:
( function( ng, app ) {
'use strict';
app.directive( 'myMap', ['$rootScope', function($rootScope) {
return {
restrict: 'AE',
scope : {},
link: function(scope, element, attr) {
scope.Template = '/directive_html/map.html';
scope.initMap = function() {
var map = new google.maps.Map(document.getElementById('contact-map'), { ...
...
};
},
template: "<div ng-include='Template'></div>"
Map.html(指令模板html)
<div id='contact-map'></div>
<script src="https://maps.googleapis.com/maps/api/js?callback=initMap" async defer></script>
<script>
// This is called
function initMap() {
// call directive scope.initMap()
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script>
【问题讨论】:
-
您可以尝试删除
script标签中的async defer吗? -
@SabarishSenthilnathan 这并没有解决它
-
您需要手动初始化地图。加载地图脚本时您的元素将不存在建议使用各种角度地图模块之一以使其更简单
-
脚本加载器中的回调需要是全局函数,角度范围内的任何东西都不是
-
@charlietfl 请参见上文。我在从回调调用的模板上制作了一个脚本。如何从该函数调用指令 js 中的
scope函数?
标签: javascript angularjs google-maps