Различия между возвратом объекта и функцией в определении директивы?
Какова функциональная разница между следующим кодом (в Widget Uno) с использованием объекта определения директивы (я думаю, что он называется..?)...
angular.module("app").
directive("widgetUno", ["$http", function ($http) {
return {
// A whole bunch of crap going on here
},
templateUrl: "widgetUno.html"
};
}]);
... И этот код в Widget Dos?
angular.module("app").directive('widgetDos', function($http) {
return function(scope, element, attrs) {
// A whole bunch of crap going on here
};
});
Я пытаюсь преобразовать директиву, подобную Widget Uno в Widget Dos, но где я могу ссылаться на templateUrl? Возможно ли это в Widget Dos?
Ответы
Ответ 1
Возврат только функции в директиве является просто сокращением для функции link
в полном определении.
Если вы указываете что-то, отличное от функции link
(например, templateUrl
), вам нужно написать длинный путь:
angular.module("app").
directive("widgetUno", ["$http", function ($http) {
return {
link: function(scope, element, attrs) {
// A whole bunch of crap going on here
},
templateUrl: "widgetUno.html"
};
}]);
Эта разница действительно документирована здесь - http://docs.angularjs.org/guide/directive
Ответ 2
Тот, который возвращает функцию, на самом деле является ярлыком для:
angular.module("app").directive('widgetDos', function($http) {
return {
link: function(scope, element, attrs) {
//...
};
}
});
Используйте его, если ваша директива не нуждается в шаблоне, контроллере и т.д. Помимо этого нет никакой функциональной разницы между этими двумя вызовами.
Ответ 3
Он должен работать следующим образом:
angular.module("app").directive('widgetDos', function($http) {
return {
templateUrl: "....",
link: function(scope, element, attrs) {
// A whole bunch of crap going on here
};
}
});
См. также http://docs.angularjs.org/guide/directive (длинная версия). Существует пример.