Подтвердить что ты не робот

Различия между возвратом объекта и функцией в определении директивы?

Какова функциональная разница между следующим кодом (в 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?

4b9b3361

Ответ 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 (длинная версия). Существует пример.