在服务中调用函数 - TypeError:this.isUserLoggedIn不是函数

时间:2017-12-11 21:09:19

标签: angularjs

我收到以下错误:

TypeError: this.isUserLoggedIn is not a function
    at userHasPermissionForView (accountService.js:159)
    at Object.checkPermissionForView (accountService.js:155)
    at edCareApp.js:232

当我在以下服务中调用this.isUserLoggedIn函数时。

见下文:

**第159行:** if(!this.isUserLoggedIn()){

文件accountService.js中的

angular.module("edCare")

    .service('accountService', function ($http, createAccountUrl, createAccountUserUrl, tokenUrl, tokenKey, $cookieStore, $rootScope) {

        this.isUserAuthenticated = function () {
            var token = sessionStorage.getItem(tokenKey);

            if (token)
                return true;
            else
                return false;
        }

        this.isUserLoggedIn = function () {
            if ($rootScope.repository.loggedUser != null)
                return true;
            else
                return false;
        }

        this.checkPermissionForView = function (view) {
            return userHasPermissionForView(view);
        };

        var userHasPermissionForView = function (view) {
        ** Line 159: ** if (!this.isUserLoggedIn()) {
                return false;
            }

            if (!view.permissions || !view.permissions.length) {
                return true;
            }

            return userHasPermission(view.permissions);
        };

        this.userHasPermission = function (requiredPermissions) {
            if (!this.isUserLoggedIn()) {
                return false;
            }

            var found = false;

            angular.forEach(requiredPermissions, function (requiredPermission, index) {
                if ($rootScope.permissions.loggedUser.permissions.indexOf(requiredPermission)
>= 0) {
                    found = true;
                    return;
                }
            });

            return found;
        };

    });

这看起来很简单,但我无法看清我做错了什么。

请有人帮忙。

感谢。

1 个答案:

答案 0 :(得分:1)

userHasPermissionForView函数需要绑定到this上下文:

    this.checkPermissionForView = function (view) {
        ̶r̶e̶t̶u̶r̶n̶ ̶u̶s̶e̶r̶H̶a̶s̶P̶e̶r̶m̶i̶s̶s̶i̶o̶n̶F̶o̶r̶V̶i̶e̶w̶(̶v̶i̶e̶w̶)̶;̶
        return userHasPermissionForView.bind(this)(view);
    };

    var userHasPermissionForView = function (view) {
        if (!this.isUserLoggedIn()) {
            return false;
        }

        if (!view.permissions || !view.permissions.length) {
            return true;
        }

        return userHasPermission(view.permissions);
    };