Невозможно назначить данные fs.readFile для свойства объекта фабрики

0

Я пытаюсь сделать вызов fs.readFile в службе Angularjs, которая является объектом, содержащим как методы, так и свойства.

Я вызываю fs.readFile из метода объекта службы и пытаюсь назначить данные, считанные для свойства объекта службы, но это всегда приводит к неопределенному. Следующий код должен сделать мои намерения ясными;

    angular.module('myApp.controllers', []).controller('exampleCtrl', function(objectFac){
        objectFac.func();
        console.log(objectFac.prop); // Undefined
        console.log(objectFac.object.prop); // Undefined
    });

   angular.module('myApp.Services').service('objectFac', function (){
        this.prop = '';
        this.object.prop = '';
        this.func = function(){
            this.param = fs.readFileSync(filePath, 'utf-8'); //If I use a call back (non Sync) and log the data to console, it shows correctly but I cannot assign it to objectFac.prop or object.prop. 
    };

Я пробовал как readFile, так и readFileSync, то же самое происходит и с обоими. Я могу регистрировать данные, полученные из файла, на консоль, просто не назначая свойство объекта, которое я хочу. Это всегда приводит к неопределенности.

Благодарю.

  • 0
    Я так понимаю, вы используете node-webkit?
  • 0
    Конечно, знаю! :)

1 ответ

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

службы создаются с использованием new ключа в угловом формате, поэтому, чтобы исправить вашу проблему, выполните следующие действия:

angular.module('myApp.Services').service('objectFac', function() {
          this.prop = '';
          this.object.prop = '';
          this.func = function() {
            this.param = fs.readFileSync(filePath, 'utf-8');
}

будет выглядеть так:

angular.module('myApp.Services').service('objectFac', function() {
      return function() {
          this.prop = '';
          this.object.prop = '';
          this.func = function() {
            this.param = fs.readFileSync(filePath, 'utf-8');
          }
}
  • 0
    Спасибо, Мули. Я задумался об этом в начале проекта, но не столкнулся с какими-либо проблемами, поэтому предположил, что все сделал правильно. Еще один вопрос, если вы не возражаете; будет ли это возвращать один и тот же объект изнутри каждого контроллера, или, возвращая новую функцию при каждом вызове, создаю ли я каждый раз отдельный объект? Я использую сервис для отслеживания ключевой информации / состояния на нескольких контроллерах. Спасибо :)
  • 0
    Angular использует шаблон синглтона для сервисов, что означает, что он будет сгенерирован один раз во всем приложении. проверьте документы: docs.angularjs.org/guide/services
Показать ещё 5 комментариев

Ещё вопросы

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