我在大多数控制器中使用初始化函数init()来设置控制器特定的变量。我发现我在大多数控制器中都这样做,所以我认为这很常见,但我找不到任何文档。我看到的选项如下:
使用运行或提供商服务
(function () {
'use strict';
CompanyController.$inject = ['CompanyFactory','LocationService'];
function CompanyController(CompanyFactory,LocationService) {
let vm = this;
// Initialize function
function init() {
vm.company = {
solutions: CompanyFactory.getSolutions(),
};
// set $location
LocationService.setLocation('company-page');
}
init();
}
angular.module('app.company', [])
.controller('CompanyController', CompanyController)
})();
答案 0 :(得分:2)
在AngularJS 1.5中引入了控制器lifecycle hooks。 $onInit
钩子应该扮演这个角色:
this.$onInit = function () { ... }
$onInit
hook是pre-link函数的替代品。它由编译器执行。
如果控制器不属于指令(ng-controller
也是指令),则可能无法执行,但直接用$controller
实例化,如路由控制器。在这种情况下,应在构造函数中显式调用this.$onInit()
。
应该注意的是,在原始代码段function init() {...}
中没有发挥重要作用。它不作为一种方法公开,因此它无法帮助控制器更加可测试或可扩展。