Angular工厂:如何在声明的对象中使用方法?

时间:2014-09-10 08:02:16

标签: javascript angularjs factory

我正在为我的角应用创建一个工厂 我问的是如何在我声明的同一个工厂中使用一个方法(这里是setCurrentUser()):

app.factory('User', function ($rootScope) {
  var User = {
    create: function (authUser, username) {
        // ...
        setCurrentUser(username); // <== ERROR
      });
    },
    // ...
    setCurrentUser: function (username) {
      $rootScope.currentUser = User.findByUsername(username);
    },
    // ...
  };
  return User;
});

使用this.setCurrentUser(username)会产生未定义的错误,当然...... 请注意我需要setCurrentUser作为User工厂的方法,因为我必须从控制器中使用它(我无法将其定义为User工厂的本地函数...)。

3 个答案:

答案 0 :(得分:4)

您可以做的是使用函数作为本地变量并返回User对象(您的公共API),如下所示:

app.factory('User', function ($rootScope) {
  var setCurrentUser = function (username) {
    $rootScope.currentUser = ...
  };

  var create = function(authUser, username) {
    // ...
    setCurrentUser(username); // <== NO ERROR
  };

  return {
    create: create,
    setCurrentUser: setCurrentUser
  };
});

答案 1 :(得分:0)

尝试在创建函数声明之前声明setCurrentUser函数。如果这没有用,你可以使用这个技巧:

var that = this;

并在User对象中调用setCurrentUser as:

that.setCurrentUser

答案 2 :(得分:0)

我尝试使用闭包,因为在您定义User.create() User时,您可以拨打setCurrentUser

User.setCurrentUser(username);