【发布时间】:2017-07-18 03:34:12
【问题描述】:
ng-controller="invoiceController as invoice" 创建新的 invoiceController 构造函数并将其分配给幕后的作用域,这与 $scope 注入在控制器函数参数中所做的类似
我对上述观点是否正确。
如果是,那么范围如何与此相关。 请帮忙。
【问题讨论】:
标签: angularjs angularjs-controller angularjs-controlleras
ng-controller="invoiceController as invoice" 创建新的 invoiceController 构造函数并将其分配给幕后的作用域,这与 $scope 注入在控制器函数参数中所做的类似
我对上述观点是否正确。
如果是,那么范围如何与此相关。 请帮忙。
【问题讨论】:
标签: angularjs angularjs-controller angularjs-controlleras
“as”告诉“this”应该指向什么。这样,您可以在不同的范围内创建多个控制器实例,而不会因名称不同而混淆它们。
【讨论】:
它允许您将控制器用作类或原型,您可以将类/原型方法和属性公开给模板,而不是控制器将方法和属性添加到 scope 对象。
因此,对于 ES2015 或 ES5,您可以执行以下任一操作:
export class SomeController {
someProperty = true;
someMethod() {
return 'foo';
}
}
或者
function SomeController() {}
SomeController.prototype.someProperty = true;
SomeController.prototype.someMethod = function() { return 'foo'; }
现在,如果您将其中之一作为SomeController as ctrl 提供给您的模板,那么您将能够以ctrl.someProperty 和ctrl.someMethod() 访问它们。您的控制器的 ctrl 实例已添加到您的 $scope 中。
另一个好处是内存占用。猴子修补函数到 $scope 是浪费的。类和原型允许共享相同的方法实现,同时保持每个实例分开。例如,对于具有许多实例(例如列表项)的组件来说,这会加起来。
【讨论】: