将服务应用于控制器 - 未知提供者:ModalSrvProvider< - ModalSrv

时间:2016-09-03 10:46:50

标签: angularjs ecmascript-6

我找到了类似的例子:https://github.com/angular-fullstack/generator-angular-fullstack/issues/1551但在我的情况下,某些东西不起作用。 我的服务很简单:

/*jshint esnext: true */

class ModalSrv {
    constructor($scope) {
    }

    open(data) {
        $scope.data = data;
        $scope.modalClass = 'open';
    }
}

ModalSrv.$inject = ['$scope'];

export default ModalSrv;

还有非常简单的控制器:

/*jshint esnext: true */

import ModalSrv from './ModalSrv'


class ShowVersionCtrl {
    contructor($rootScope, $scope, $http, ModalSrv) {
        $scope.showVersion = () => {
            $http.get('/my_data.json').then(
                result => {ModalSrv.open(result.data);} 
            );
        }
    }
}

ShowVersionCtrl.$inject = ['$rootScope','$scope', '$http', 'ModalSrv'];

export default ShowVersionCtrl;

但我得到Unknown provider: ModalSrvProvider <- ModalSrv如何使用此控制器使这种服务工作?

1 个答案:

答案 0 :(得分:0)

如果您使用的是AngularJS,则应使用某个名称注册创建的服务。您创建了类,您需要将此类注册为角度模块。

import ModalSrv from './ModalSrv'

angular.module(app, []).service('modalService', ModalSrv);

所以你说有角度,这个类应该被提到modalService作为依赖。而angular将创建ModalSrv类的单个实例。

最后你的代码将如下所示:

/*jshint esnext: true */


class ShowVersionCtrl {
    contructor($rootScope, $scope, $http, modalService) {
        $scope.showVersion = () => {
            $http.get('/my_data.json').then(
               result => {ModalSrv.open(result.data);} 
            );
        }
    }
}

ShowVersionCtrl.$inject = ['$rootScope','$scope', '$http', 'modalService'];

export default ShowVersionCtrl;