AngularJS - 将控制器名称传递给服务

时间:2015-02-10 11:13:15

标签: angularjs angularjs-scope angular-services

我有一系列控制器:

Controller1
Controller2
Controller3

我也有一个服务,我的所有控制器都会调用。目前,在每个Controller的顶部,我创建了一个声明Controller名称的范围:

$scope.ControllerName = 'Page1Controller';

然后我将此范围传递给服务:

$scope.$parent.Description = serviceMydata.getDescription($scope.ControllerName).toString();

有没有办法不必申报$scope.ControllerName

我的服务:

app.service('serviceMydata', function(){

    return {
        getDescription: function(ControllerName) {
            return [
                mapData[ControllerName]
            ];
        }
    }
});

var mapData = {
    Page1Controller : 'Data to insert when on Page1',
    Page2Controller : 'Data to insert when on Page2',
    Page3Controller : 'Data to insert when on Page3',
    Page4Controller : 'Data to insert when on Page4',
}

2 个答案:

答案 0 :(得分:1)

当您声明控制器时,您可以执行以下操作:

(function(){

    var ctrlName = 'MainCtrl'

    app.controller(ctrlName, function($scope, service) {
        myService.fn(ctrlName);
    });

})();

Afaik,没有一种简单的方法可以通过棱角分明,我没有理由去尝试。

答案 1 :(得分:1)

您可以在服务中的闭包内捕获控制器的名称:

var app = angular.module('myapp', []);
app.service('myservicefactory', function () {
    return {
        create: function (name) {
            var controllerName = name;
            return {
                getDescription: function () {
                    console.log(controllerName);
                }
            };
        }
    };
});

app.controller('myctrl', ['$scope', 'myservicefactory', function ($scope, myservicefactory) {
    $scope.service = myservicefactory.create('myctrl');
    $scope.callService = function () {
        $scope.service.getDescription();
    };
}]);
app.controller('myctrl2', ['$scope', 'myservicefactory', function ($scope, myservicefactory) {
    $scope.service = myservicefactory.create('myctrl2');
    $scope.callService = function () {
        $scope.service.getDescription();
    };
}]);

是的,您必须实例化您的服务并提供控制器名称或其他内容,但之后,它会在您的服务中捕获。这是一个小提琴演示:http://jsfiddle.net/29wtqeyz/1/

我认为你不想要更紧密耦合的东西:请记住,你的服务不应该与消费者联系。