$ctrl 是控制器中的视图模型对象。这个 $ctrl 是您选择的名称(vm 是另一个最常见的名称),如果您检查您的代码,您可以看到定义为 $ctrl = this;,所以基本上它是this 控制器功能的关键字。
所以现在如果你使用$ctrl.latestMeasurement = 'someValue',那么就像你在控制器函数中添加一个属性latestMeasurement。
现在如何在 HTML 中使用它?
要访问 HTML 中的 latestMeasurement 属性,您的代码必须具有 <h1>{{$ctrl.latestMeasurement}}</h1>(H1 标记只是一个示例。)
这里 $ctrl 与我上面在控制器部分解释的不同。这里 $ctrl 是用于控制器的 controllerAs 属性的值。但是$ctrl是controllerAs属性的默认值,所以你的代码可能没有定义controllerAs属性,所以Angular会在HTML中取默认值$ctrl。
这是大多数人感到困惑的地方。让我解释一下,
假设在您的新控制器中,您已将 this 关键字声明为变量 vm,并将您的 controllerAs 属性设置为 myCtrl,即;
controllerAs: 'myCtrl' 在定义控制器属性时。
var vm = this; 在你的控制器函数中。
在这种情况下,在 js 中你必须使用 vm 来设置值,而在 HTML 中你必须使用 myCtrl。例如,
在JS控制器函数vm.test = 'Hello world';
在 HTML <span ng-bind="myCtrl.test"></span>
结果 Hello world 将显示在您的页面中。
为什么是 $ctrl 而不是 $scope?
视图模型对象模型概念是在 AngularJS 1.5 中引入的,它实际上是迁移到 $scope 不再存在的 Angular 2 的一部分。所以在 1.5 中他们引入了新的方法,但没有完全删除 $scope。
希望答案有所帮助。
有关基本的 Javascript 概念,您可以查看http://javascriptissexy.com/16-javascript-concepts-you-must-know-well/
更详细的AngularJS $ctrl 概念可以看https://johnpapa.net/angularjss-controller-as-and-the-vm-variable/