You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ng-map中显示标记失败,报错[ng:areq] 'myCtrl'不是函数

解决ng-maps中"myCtrl is not a function, got undefined"错误

这个错误本质是Angular找不到你定义的myCtrl控制器,咱们一步步来排查和解决:

常见原因及修复方案

1. 控制器未正确注册到Angular模块

Angular 1.3+之后默认不推荐全局控制器,一定要把控制器注册到对应的模块里,还要确保依赖ngMap模块(因为你用的是ng-maps组件)。

正确的控制器注册方式:

angular.module('myApp', ['ngMap'])
  .controller('myCtrl', function($scope) {
    // 这里写你的控制器逻辑,比如设置标记位置
    $scope.markerPos = [40.7128, -74.0060]; // 示例:纽约坐标
  });

2. HTML中模块和控制器引用错误

要确保你的HTML页面正确指定了ng-app(对应模块名)和ng-controller(对应控制器名),而且拼写要完全一致(大小写敏感!)。

示例HTML结构:

<html ng-app="myApp">
  <body ng-controller="myCtrl">
    <!-- ng-maps组件 -->
    <ng-map center="{{markerPos}}">
      <marker position="{{markerPos}}" title="My Marker"></marker>
    </ng-map>
  </body>
</html>

3. 脚本加载顺序不对

脚本加载顺序直接影响Angular能否识别控制器,正确的顺序应该是:

  • 先加载AngularJS核心库
  • 再加载ng-maps的脚本
  • 最后加载你自己的控制器代码(或者内嵌的控制器脚本)

示例加载顺序:

<script src="https://code.angularjs.org/1.3.15/angular.js"></script>
<script src="https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/scripts/ng-map.min.js"></script>
<script src="https://maps.google.com/maps/api/js?libraries=places&key=AIzaSyDQ2TPHVI30yFa6-yVLf8ffNRTlwWvAmf8"></script>
<!-- 你的控制器脚本放在最后 -->
<script>
  // 这里写控制器代码
</script>

4. 避免全局控制器的坑

如果你之前用了全局控制器(比如直接写function myCtrl($scope) {}),Angular 1.3+默认禁用了这种方式,所以一定要改用模块注册的方式,否则Angular会找不到这个控制器。

完整可运行示例

给你一个完整的代码示例,你可以直接参考:

<!DOCTYPE html>
<html ng-app="myApp">
<head>
  <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
  <script src="https://code.angularjs.org/1.3.15/angular.js"></script>
  <script src="https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/scripts/ng-map.min.js"></script>
  <script src="https://maps.google.com/maps/api/js?libraries=places&key=AIzaSyDQ2TPHVI30yFa6-yVLf8ffNRTlwWvAmf8"></script>
</head>
<body ng-controller="myCtrl">
  <ng-map center="[40.7128, -74.0060]" zoom="12">
    <marker position="[40.7128, -74.0060]" title="New York City"></marker>
  </ng-map>

  <script>
    angular.module('myApp', ['ngMap'])
      .controller('myCtrl', function($scope) {
        // 这里可以添加动态修改标记的逻辑,比如点击按钮改变位置
      });
  </script>
</body>
</html>

最后再检查一遍:控制器名称拼写是否和HTML里的一致,模块是否正确依赖了ngMap,脚本加载顺序有没有问题,应该就能解决这个错误了。

内容的提问来源于stack exchange,提问作者krishna mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:23:51