协助angularjs代码

时间:2018-01-16 20:08:37

标签: angularjs

我是角色的新手,也必须使用angularjs。大多数我可以与角度相关,但有以下代码让我有点困惑,任何帮助表示赞赏。

angular
        .module('Test')
        .directive('nbTest', [savedTest]);

    /* @ngInject */
    function savedTest() {
        var directive = {
            restrict: 'E',

            scope: true,
            templateUrl: 'test/newTest/directives/savedTest/nbSavedTests.tmpl.html',
            controllerAs: 'vm',
            controller: ['$scope', '$mdUtil', '$mdDialog', '$timeout', 'nbApplicationFactory', 'dateService', savedTestCtrl]
        };
        return directive;

我特别困惑的是'控制器'的阵列。我想要做的是使用$ onInit生命周期钩子,但是我很困惑如何定义控制器的方式。

2 个答案:

答案 0 :(得分:1)

这是AngularJS中DI的完成方式。要实现$onInit life cycle hook,您只需在控制器函数内部实现它,如:

function savedTestCtrl($scope, $mdUtil, $mdDialog, $timeout, nbApplicationFactory, dateService) {
    var ctrl = this;
    ctrl.$onInit = onInit;

    function onInit() {
        //your code here
    }
}

答案 1 :(得分:1)

按照你的问题顺序。

首先,'控制器中的数组文字' property在控制器中具有inject dependencies的目的。控制器的行为在savedTestCtrl函数中定义,该函数是数组的最后一个元素。数组中定义的依赖项由框架注入,因此您可以使用params获取控制器内的依赖项。控制器必须具有在阵列中定义的相同数量的参数。例如,savedTestCtrl函数必须具有以下定义:

function savedTestCtrl($scope, $mdUtil, $mdDialog, $timeout, nbApplicationFactory, dateService){

  console.log(dateService.text); //prints the property text of your dateService object

}

其次,$ onInit生命周期钩子需要使用函数作为控制器的属性来定义。像这样:

function savedTestCtrl($scope, $mdUtil, $mdDialog, $timeout,nbApplicationFactory, dateService){

  var vm = this; 
  vm.$onInit = function(){
    console.info('The init of savedTestCtrl')
  } 

}

因为此生命周期钩子从角度1.5开始可用,所以请确保您使用的是此版本或更高版本。