How do the function argument names in Angular.js objects connect to other objects?

前端 未结 2 708
醉梦人生
醉梦人生 2021-02-04 03:19

Let\'s say I have made a module with a service and a controller in Angular.js, I am able to access that service inside of the controller like so:

var myapp = ang         


        
相关标签:
2条回答
  • 2021-02-04 03:58

    Angular simply parses the toString() representation of the function for the names of dependencies. From the docs:

    In JavaScript calling toString() on a function returns the function definition. The definition can then be parsed and the function arguments can be extracted.

    However, note that this approach will fail if your code is minified. For that reason, Angular supports an alternative (I would suggest always using it) syntax, using an array:

    myapp.controller('mainController', ["$scope", "Service", function($scope, Service) {
      $scope.greeting= Service.example;
    }]);
    
    0 讨论(0)
  • 2021-02-04 04:15

    This is accomplished by the quite clever method annotate (source) which takes a regex scan on function signature source (using function.toString()) and iteratively pushes each function argument into the function $inject array.

    The same result is accomplished when manually specifying the $inject array as in:

    var MyController = function($scope, myService) {
      // ...
    }
    // Define function dependencies
    MyController.$inject = ['$scope', 'myCustomService'];
    
    0 讨论(0)
提交回复
热议问题