如何将依赖项注入函数?

时间:2016-04-28 23:28:26

标签: angularjs dependency-injection

我试图将依赖项注入函数但它似乎没有工作。我做错了什么或者我应该做些不同的事情,而不是尝试将依赖项注入函数中?我试图让以下代码工作:

angular.module('app').controller('usersController', usersController);

usersController.$inject = ['$http', '$cookies'];
function usersController($http, $cookies) {
  var self = this;
  self.isLoggedIn = ($cookies.get('token') && $cookies.get('secret'));

  register.$inject = ['$http', '$cookies'];

  self.register = register;

  function register($http, $cookies) {
    console.log(self.username);
    $http.post('/register', {
      username: self.username,
      password: self.password,
      email: self.email
    }).then(function successCallback(response) {
      self.isLoggedIn = true;
      $cookies.put('token', response.data.token);
      $cookies.put('secret', response.data.secret);
    }, function errorCallback(response) {
      console.log('Something went wrong.');
    });
  };
};

2 个答案:

答案 0 :(得分:1)

这看起来不合适有几个原因;你的控制器已经注入了这些服务,因此再次注入它们没有多大意义,而且据我所知,没有任何状态需要传递到你的函数中才能实际工作。

这样会更干净 - 删除无关的$inject并清理函数参数列表。

angular.module('app').controller('usersController', usersController);

usersController.$inject = ['$http', '$cookies'];
function usersController($http, $cookies) {
    var self = this;
    self.isLoggedIn = ($cookies.get('token') && $cookies.get('secret'));

    self.register = register;

    function register() {
        console.log(self.username);
        $http.post('/register', {
            username: self.username,
            password: self.password,
            email: self.email
        }).then(function successCallback(response) {
            self.isLoggedIn = true;
            $cookies.put('token', response.data.token);
            $cookies.put('secret', response.data.secret);
        }, function errorCallback(response) {
            console.log('Something went wrong.');
        });
    }
}

答案 1 :(得分:1)

你不必。该范围内已提供$http$cookies

function usersController($http, $cookies) {
    // ...

    this.register = function() {
        $http.post(...)

        // and so on
    }
}