2015-08-13 2 views
1

Я пытаюсь понять директиву клиента, чтобы включить его в наше приложение AngularJS.Что делает второй параметр как массив в угловой директиве?

Второй параметр, кажется, область строки, а затем основная функция:

mainApp.directive('uiCalendar', ['uiCalendarConfig', function(uiCalendarConfig) { 
    return { 
     restrict: 'A', 
     scope: {eventSources:'=ngModel',calendarWatchEvent: '&'}, 
     controller: 'uiCalendarCtrl', 
     link: function(scope, elm, attrs, controller) { 

, но все примеры пользовательских директив, которые я сделал до сих пор имеют в качестве второго параметра не является массивом, но простой и функциональный Основная функция, как это:

myApp.directive('mainCustomerPanel', function() { 
    return { 
     restrict: 'EAC', 
     templateUrl: 'mainCustomerPanelTemplate', 
     scope: { 
      fullName: "@", 
      getCustomerInfo: "&" 
     }, 

Я могу видеть, что uiCalendarConfig это функция, которая, по-видимому называется, но, хотя я включил его, а в нашем приложении, он дает мне ошибку:

Error: [$injector:unpr] http://errors.angularjs.org/1.3.13/$injector/unpr?p0=uiCalendarConfigProvider%20%3C-%20uiCalendarConfig%20%3C-%20uiCalendarDirective 
S/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.3.13/angular.min.js:6:417 

Что именно эта ошибка говорит мне и что еще мне нужно сделать относительно функции uiCalendarConfig, чтобы эта пользовательская директива работала?

ответ

1

Параметр-массив является способом (и должен быть предпочтительным способом, поскольку он предотвращает проблемы с минимизацией), чтобы объявлять зависимости, последний элемент является функцией объявленного компонента, а все остальные являются именами служб, заводов, значения и т. д., от которых зависит этот компонент. Они вводятся в функцию в качестве параметров в том же порядке, как они появляются в массиве:

angular.module('someModule') 
    .constant('squirrelApiUrl', 'http://squirrels.com/api'); 

angular.module('someModule') 
    .factory('squirrelTransformer', function() { 
     return function(squirrel) { 
      return squirrel.superSize(); //whatever 
     }; 
    }); 

angular.module('someModule') 
    .service('squirrelService', ['squirrelApiUrl', 'squirrelTransformer', squirrelService]); 

function squirrelService(squirrelApiUrl, squirrelTransformer) { 
    //You can use the injected squirrelApiUrl and quirrelTransformer here 
} 

Обратите внимание, что с массивом-синтаксисом, имена нагнетаемого параметра на самом деле не имеют значения, но это хорошая практика дать им одинаковые имена для ясности.

Ошибка, с которой вы сталкиваетесь, в основном говорит о том, что uiCalendarConfig не определен и, следовательно, не может быть введена - вероятно, вам не хватает файла. Для получения дополнительной информации о Injection Dependency in Angular see the docs

1

Ошибки сообщают вам, что вы не ввели зависимость модуля «uiCalendarConfig», от которого зависит эта директива. Вы можете узнать больше об этом здесь: https://docs.angularjs.org/guide/di

Лучше использовать нотацию массива, потому что это необходимо, когда вы будете минимизировать свой код javascript.

1

Вы можете посетить URL-адрес ошибки, и это даст вам объяснение, что произошло. Но, короче говоря, директива зависит от uiCalendarConfig и ее нет. Скорее всего, вы включаете только директиву uiCalendar, но вам нужен весь модуль, потому что директива зависит, по крайней мере, от конфигурации.

Вы можете использовать либо массив, либо функцию в качестве второго параметра, но используя массив, ваша функция должна быть последним элементом в массиве. Что происходит, так это то, что Angular будет рассматривать определенные зависимости в массиве, найти экземпляры этих сервисов, значения или что угодно и вызвать функцию, эффективно вставляя их в функцию. Вы можете получить это сделать без массива, как и

.directive('directive', function(service1){})

и Угловое попытается найти service1, но если вы Минимизировать ваш код, он потерпит неудачу. Когда вы используете массив, строки не получают minified, и не имеет значения, как ваши параметры вызываются в функции.

Смежные вопросы