1

ファクトリを使用してコントローラーが変数を共有できるようにしようとしています。私は自分のコードをかなりいじりましたが、 $broadcast を避けるべきであることは理解しています。これは純粋に教育的な演習です。コントローラがファクトリから関数を実行できるようにするさまざまな方法を試しましたが、「メソッド 'login' がありません」というエラーが継続的に発生します。

ユーザーがログインすると、ヘッダーコントローラーがそれをキャッチして自分自身を更新できるように、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;
    });

ユーザーコントローラー:

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! ");
        });
    };

    }]);

下手なプログラミングは無視してください。核となる概念を理解したら、常にコードを最適化し、肉付けしています。

4

1 に答える 1