2016-05-19 5 views
4

Недавно я наткнулся на викторинах и вопрос

Decorators use 

Select one: 
a. Both 
b. $delegate 
c. None 
d. $provide 

Я выбираю б. $ Делегата и викторина говорит, что это не так, и викторина говорит правильный ответ a.Both.

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

app.config(function ($provide) { 
    $provide.decorator('movieTitle', function ($delegate) { 
    return $delegate + ' - starring Keanu Reeves'; 
    }); 
}); 

также, в в decorator documentation указано, что

Эта функция будет вызываться, когда служба должна быть создана и должна вернуть оформленный экземпляр службы. Эта функция вызывается с использованием метода инжектора.invoke и поэтому полностью инъецируется. Локальные аргументы вставки:

$ delegate - оригинальный экземпляр службы, который может быть обезврежен, настроен, оформлен или делегирован.

так, я что-то упустил или викторину неправильно, или я ошибаюсь, может кто-то помочь мне понять это.

ответ

1

Да, правильный ответ - оба. В качестве примера это фрагмент кода, где установлен декоратор для службы $log с использованием настраиваемой службы logEnchance для добавления пользовательских функций. В этом случае logEnchance делать сообщения в службу внешнего журнала.

angular.module('angularApp').config(configureLogger); 

// The decorator allows us to inject custom behaviors 
function configureLogger($provide) { 

    // registers a value/object that can be accessed by providers and services 
    $provide.constant('logDecorator', logDecorator); 

    // registers a decorator function 
    // $provide.decorator intercept $log service letting us add custom functionality 
    $provide.decorator('$log', logDecorator); 

    // inject dependencies into logDecorator function 
    logDecorator.$inject = ['$delegate', 'logEnchance']; 

    function logDecorator($delegate, logEnchance) { 
     // logEnchance is the service who modify the $log service 
     logEnchance($delegate); 
     return $delegate; 
    } 
}