Как вызвать фабрику из директивы из другого файла?

0

Я разрабатываю в первый раз с Angular JS, и я редактирую приложение моего друга. Я бы назвал фабрику из директивы, которая находится в другом файле. Вот код задействованных файлов:

пользовательский factory.js

(function() {
  'use strict';

  angular.module('myApp.services').factory('currUserService', function() {
    var curruser = '';
    var self = this;
    return {
      setCurrUser: function(user) {
          self.curruser = user;
      },
      getCurrUser: function() {
          return self.curruser;
      },
    }
  });


}());

Главные-пользователи-box.js

(function() {
  'use strict';

  angular.module('myApp.directives').directive('mainpageUsersBox', function() {
    return {
      restrict: 'E',
      replace: true,
      scope: {
          users: '=users'
        },
      templateUrl: 'views/templates/mainpage-users-box.directive.html',
      controller: controller,
      controllerAs: 'ctrl'
    };
  });

  function controller($scope) {
    var ctrl = this;

    ctrl.openProfile = function(user) {
      ctrl.currUserService.setCurrUser(user);
    };
  }

  controller.$inject = ['$scope'];

}());

mainpage.html

[...]
<mainpage-users-box users="ctrl.users"></mainpage-users-box>
[...]

Как вы можете видеть во втором файле, я хочу использовать .setCurrUser(user) но я получаю эту ошибку: TypeError: Не удается прочитать свойство setCurrUser undefined в консоли Chrome.

Можете ли вы помочь мне разобраться, что может быть причиной?

  • 0
    Было бы полезно узнать, как вы включаете эти файлы в HTML.
  • 0
    Я добавил <script src="/scripts/services/user-factory.js"></script> и <script src="/scripts/directives/mainpage-users-box.js"></script>
Показать ещё 1 комментарий
Теги:
controller
factory
directive

1 ответ

0

Похоже, вы вообще не вводите эту услугу:

// Where the service?  
function controller($scope) {
    var ctrl = this;

    ctrl.openProfile = function(user) {
      ctrl.currUserService.setCurrUser(user);
    };
  }

  // Where currUserService?
  controller.$inject = ['$scope'];

Не будет ли это работать, если вместо этого вы измените свой контроллер?

function controller(currUserService) {
    var ctrl = this;

    ctrl.openProfile = function(user) {
      ctrl.currUserService.setCurrUser(user);
    };
  }

  controller.$inject = ['currUserService'];

Кажется, вы используете controllerAs стиль написания контроллеров. В этом случае вам не нужно вводить $scope, если вы не добавляете $watches.

  • 0
    Я сделал, как вы написали, но я получаю ту же ошибку :(

Ещё вопросы

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