我正在为我的角应用创建一个工厂
我问的是如何在我声明的同一个工厂中使用一个方法(这里是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
工厂的本地函数...)。
答案 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);