Фабрика AngularJS: Лучший способ назвать родителя буквальным? - PullRequest
0 голосов
/ 21 октября 2018

Если у меня есть

var test = {
  return {
    foo: function() {
      return 1
    },
    sub: {
      bar: function() {
        var foo = this.foo() // <--- here, does obviously not work
      }
    }
  }
}

Каков рекомендуемый и лучший способ доступа к foo() из sub.bar() ...?

Чтобы уточнить, я хочу разделитьСлужба angularjs на разделы.


"Реальный" код:

angular.module('myApp').factory('Service' function() {
  return {
    foo: function() {
       return 1
     },
     sub: {
       bar: function() {
         var foo = this.foo() // <--- here, does obviously not work
       }
     }
   }
 })

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Поскольку вы используете угловую фабрику , вы можете использовать Шаблон модуля выявления :

angular.module('myApp').factory('Service' function() {
   function foo() {
     return 1
   }

   var sub = {
     bar: function() {
       var foo = foo()
     }
   }

   return {
     foo: foo,
     sub: sub
   }
 })
0 голосов
/ 21 октября 2018

Это не нормально:

return {
  foo: function() {
    return 1
  }
}

Вам необходимо удалить этот оператор return, и в функции bar вы можете получить доступ к функции foo, используя имяпеременной test следующим образом: test.foo()

var test = {
  foo: function() {
    return 98989;
  },
  sub: {
    bar: function() {
      var foo = test.foo();
      console.log(foo);
    }
  }
};

test.sub.bar();

Другой способ - использовать функцию bind, но это излишне:

var test = {
  foo: function() {
    return 98989;
  },
  sub: {
    bar: function() {
      var foo = this.foo(); // Using the object 'this'
      console.log(foo);
    }
  }
};

test.sub.bar.bind(test)();

Теперь вы можете объявить переменную service и использовать эту переменную:

angular.module('myApp').factory('Service'function() {
  var service = {
    foo: function() {
      return 1
    },
    sub: {
      bar: function() {
        var foo = service.foo();
                  ^^^^^^^
      }
    }
  };

  return service;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...