AngularJS - Невозможно использовать фабричный метод внутри директивы

0

У меня проблема при попытке myFactory в myDirective. Мне нужен myfactory.myMethod для получения динамического templateUrl myfactory.myMethod на основе определенного события.

Это то, что я пытаюсь сейчас:

(function () {
  'use strict';

  angular
    .module('myApp')
    .directive('myDirective', ['myFactory', function (myFactory) {

      var directive = {
        restrict: 'E',
        templateUrl : function(myFactory){
          if(myFactory.myMethod()){
            return '/app/hello.html'
          }
          return '/app/world.html'
        },
        controller       : 'MyController',
        controllerAs     : 'myCtrl',
        bindToController : true
      };

      return directive;

    }]);

})();

Я получаю следующую ошибку

myFactory.myMethod не является функцией

Я пробовал смотреть на различные решения также на SO, но я не смог найти правильный.

myFactory - простая фабрика

(function () {
  'use strict';

  angular
    .module('myApp')
    .service('myFactory', function () {

      function myMethod() {
       . . .
      }

      //Or
      var myMethod = function(){
       . . .
      }

      return {
        myMethod: myMethod
      }

    });
})();

Как я могу это исправить?

Заранее спасибо.

  • 1
    Покажите код фабрики myFactory .
  • 0
    Готово, но дело не в неправильной фабрике. Я не просто нахожу правильный способ внедрить Service / Factory в директиву, используя это определение директивы.
Показать ещё 10 комментариев
Теги:
dependency-injection
angularjs-directive
angularjs-factory

1 ответ

1
Лучший ответ

Я думаю, что я нашел вашу ошибку, то есть вы передали службу как параметр в функции, возвращающий шаблон url templateUrl: function(myFactory){}. Это совершенно неправильно, вы не можете использовать его в качестве параметра.

Чтобы исправить это, вам нужно удалить параметр myFactory в установленной функции templateUrl, например:

templateUrl : function(){
  if(myFactory.myMethod()){
    return '/app/hello.html'
  }
    return '/app/world.html'
  }

И я вижу, что в вашем коде отсутствует создающий модуль: angular.module('myApp', []);

Попробуйте себя в CodePen.

Надеюсь, поможет ;)

  • 0
    Вы совершенно правы. Это была плохая ошибка. +1 и принял ответ. Благодарю.
  • 0
    Насчет кода не хватает, он не пропустил, он у меня в отдельном файле.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню