我试图让控制器使用工厂共享变量。我已经玩了很多代码,我确实应该避免使用$ broadcast。这纯粹是一种教育活动。我尝试了许多不同的方法,允许控制器从我的工厂运行一个功能,我不断得到错误"没有方法'登录'"
我试图允许我的userController在工厂上调用具有新用户变量的$ broadcast,这样一旦用户登录,头控制器就可以捕获它并自行更新。
angular.module('app.user').factory('SessionService', function ($rootScope) {
var data = {};
data.user = null;
data.login = function (user){
this.user = user;
$rootScope.$broadcast('userLoggedIn');
return user;
};
return data;
});
UserController中:
angular.module('app.user').controller('UserController', ['$scope', '$routeParams', '$location', 'Global', 'UserService', '$q', 'SessionService',
function ($scope, $routeParams, $location, Global, UserService, $q, SessionService) {
$scope.global = Global;
$scope.selectedUsers = [];
$scope.users = [];
$scope.updateSessionUser = function(user){
SessionService.login(user);
}
//CREATE NEW USER
$scope.createUser = function (user, callback) {
var newuser = new UserService({
email: user.email,
password: user.password1,
});
newuser.$create({}, function (response) {
if (response.message) {
alert(response.message);
} else {
$scope.updateSessionUser.login(response.user);
$location.path('/account/order');
}
}, function (response) {
alert("Error communicating with the website! ");
});
};
}]);
忽略糟糕的编程。一旦核心概念失效,我就会不断优化和充实代码。
答案 0 :(得分:0)
尝试替换
$scope.updateSessionUser.login(response.user);
与
$scope.updateSessionUser(response.user);