关于 angularjs:在 JavaScript 中访问 Angular.JS 控制器的 name 属性(为什么是模块的名称?)

Accessing an Angular.JS controller's name property in JavaScript (why is it the module's name?)

我有一些我不理解的简单 Angular.js 代码。

HTML:

1
  Hello, {{name}}!

JavaScript:

1
2
3
4
5
6
7
var myApp = angular.module('myApp',[]);

var controller = myApp.controller('MyCtrl', ['$scope', function ($scope) {
    $scope.name = 'Superhero';
}]);

alert(controller.name);

HTML 指令产生了我所期望的:"Hello, Superhero!" 被渲染到页面上。但是警报框令人困惑。我希望它显示字符串 "Superhero",或者控制器的名称 "MyCtrl",但它实际显示的是模块的名称 "MyApp"。为什么?我需要将什么传递给 alert 以显示分配给控制器范围的名称(即 "Superhero")或控制器本身的名称(即 "MyCtrl")?

(注意,我确实尝试过文档,但它并没有帮助我解开控制器报告模块名称而不是它自己的名称的原因。)


您想从旧代码中访问 Angular 的代码。

我的做法是使用 angular.element:

1
2
3
4
5
  Hello, {{name}}!
   

var theScope = angular.element(getElementById('myDiv')).scope();
alert(theScope.name);