как создать разные версии сервиса с помощью провайдеров angularjs - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть функция itemService .. получает элемент из контроллера shoppingList и помещает его в массив items, а затем возвращает этот массив обратно.

теперь мне нужно создать 2 списка покупок, поэтому с помощью .factory мне удалось заставить оба контроллера получать разные версии сервиса, выполняющего этот код, когда я проталкиваю элемент через первый контроллер, массив для второго контроллера не получает этот элемент, которым они являются забрызгала Теперь, как я могу сделать то же самое, используя .provider

function itemService (limit){
    let share = this;
    share.items=[];
    share.additem=function(N,Q){
        if(limit===undefined || limit>=share.items.length+1){
            let item={N,Q};
            share.items.push(item);
        }
        else {
            throw new Error("limit reached !")
        }  
    }
    share.getItems=function(){
        return share.items;
    }
}

function itemServiceFactory(){
    let factory = function(limit){
        return new itemService (limit);
    };
    return factory;
}

1 Ответ

0 голосов
/ 22 апреля 2019

Фабрика, поставщик, сервис и даже значение и константа являются версиями одного и того же.Вы можете разделить более общего поставщика на всех из них.Вот так: 1

image

From version #1 of question:

ERRONEOUS

function itemServiceProvider(){
    let provider=this;
    provider.defaults={limit:10};
    // now i need to make 2 separated version of the service
    provider.$get = function(){
        return new itemService (provider.defaults.limit);
    };
}

To convert your factory to a provider:

app.provider("MyProvider", function() {
    let provider=this;
    provider.defaults={limit:10};
    provider.$get = function() {
        return function(){
            return new itemService (provider.defaults.limit);
        };
    };
    return provider;
});

Usage:

app.controller("cntl", function(MyProvider) {
     var service1 = MyProvider();
     var service2 = MyProvider();
})

Providers, Factories, and Services are singletons. The $get function is only invoked once during the life of an app. The provider.$get function needs to returns a function which constructs new services.

For more information, see

...