AngularJs:xxx不是函数,但是工厂被注入并声明了函数

时间:2017-05-15 10:27:39

标签: angularjs factory

我正在尝试调试我的代码:我有简单的服务'密码重置'在这里:

(function () {
    'use strict';

    angular
        .module('app.login')
        .factory('ResetPasswordService', ResetPasswordService);

    function ResetPasswordService($http, $q) {

        function sendMessage() {

            var there = this;
            var deferred = $q.defer();
            var data = {
                email: this.email
            };

            $http({
                method: 'POST',
                url: 'password/email',
                data: data
            })
                .then(_loginSuccess, _loginFailed);

            function _loginSuccess(response) {
                console.log(response);
                deferred.resolve(there);
            }

            function _loginFailed(response) {
                deferred.reject('Une erreur interne est survenue' + response.error);
            }

            return deferred.promise;
        }

        return sendMessage;

    }
})();

我正在尝试在我的控制器中使用它,当用户点击“是”' (onTap事件 - 确认密码重置)

(function () {
    'use strict';

    angular
        .module('app.login')
        .controller('LoginCtrl', LoginCtrl);

    function LoginCtrl(UserModel, $ionicPopup, $scope, ResetPasswordService) {

        var vm = this;
        vm.user = UserModel.buildUser();
        vm.login = login;
        vm.forgotPassword = forgotPassword;

        /**
         * function called when user clicks on 'mot de passe oublié' button
         * @function
         * @name forgotPassword
         * @memberOf App.Login.LoginCtrl
         */
        function forgotPassword() {

            vm.data = {
                email : vm.user.email
            };

            var myPopup = $ionicPopup.show({
                template: '<input type="email" ng-model="vm.data.email" placeholder="Entrez votre adresse email">',
                title: 'Mot de passe oublié',
                subTitle: 'Souhaitez vous réinitialiser' + ' <br> ' + 'votre mot de passe ?',
                scope: $scope,
                buttons: [
                    {text: 'Non'},
                    {
                        text: '<b>Oui</b>',
                        type: 'button-positive',
                        onTap: function (e) {
                            if (!vm.data.email) {
                                //don't allow the user to close unless he enters his email
                                e.preventDefault();
                                console.log('Le champs est vide ! ');
                            } else {
                               /!\ HERE /!\ ResetPasswordService.sendMessage() /!\ HERE /!\
                                    .then(_success, _fail);
                                return vm.data.email;
                            }
                        }
                    }
                ]
            });

            myPopup.then(function (res) {
                if (res) {
                    console.log('Tapped!', res);
                }
                else {
                    console.log('annulation');
                }
            });
        }
      }

})();

但接着我告诉我那个消息

  

ResetPasswordService.sendMessage不是一个功能。

,我已经注入了匹配的工厂。我还是JS的新手,这不是我第一次看到这个消息,但我现在无法弄明白......我又做错了什么?

1 个答案:

答案 0 :(得分:3)

从你的工厂,你应该回来

return {
  sendMessage: sendMessage
}

目前,ResetPasswordService本身就是ResetPasswordService.sendMessage