AngularJS初始化控制器变量

时间:2017-12-22 06:02:17

标签: javascript angularjs

我在大多数控制器中使用初始化函数init()来设置控制器特定的变量。我发现我在大多数控制器中都这样做,所以我认为这很常见,但我找不到任何文档。我看到的选项如下:

  1. 保持原样
  2. 使用运行或提供商服务

    (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)
    
    
    })();                          
    

1 个答案:

答案 0 :(得分:2)

在AngularJS 1.5中引入了控制器lifecycle hooks$onInit钩子应该扮演这个角色:

this.$onInit = function () { ... }

$onInit hook是pre-link函数的替代品。它由编译器执行。 如果控制器不属于指令(ng-controller也是指令),则可能无法执行,但直接用$controller实例化,如路由控制器。在这种情况下,应在构造函数中显式调用this.$onInit()

应该注意的是,在原始代码段function init() {...}中没有发挥重要作用。它不作为一种方法公开,因此它无法帮助控制器更加可测试或可扩展。