Angular Factory - 为什么我的变量未定义?

Angular Factory - Why is my variable undefined?

我不明白为什么我的 messages 变量在下面代码的 displayMessage 函数中未定义。我不断收到消息未定义的错误消息。 “Cannot read property 'push' of undefined

function messageService(  ) {
  var messages = {};
  var service = {
    messages: messages,
    displayMessage: displayMessage
  };
  return service;

  function displayMessage (message, messageType) {
    messages[messageType].push(message);
  }
}

我正在尝试使用 John Papa 的方法将变量和函数与返回的服务分开布置,但我无法弄清楚如何使消息对内部函数可用。

我也试过这个:

function messageService(  ) {
  /*jshint validthis: true */
  var self = this;
  self.messages = {};
  var service = {
    messages: self.messages,
    displayMessage: displayMessage
  };
  return service;

  function displayMessage (message, messageType) {
    self.messages[messageType].push(message);
  }
}

非常感谢任何帮助!

messages[messageType] 未在任何地方定义。所以它是未定义的。

messages 被初始化为空对象,没有任何字段。所以 messages[messageType] 确实是未定义的。

要定义它,并能够对其调用 push(),您需要像

这样的行
messages[messageType] = [];

这会将 messages[messageType] 初始化为一个新的空数组。

您需要使用包含空数组的属性定义消息对象,并且您可以推送值:

function messageService(  ) {
  var service = {
    messages: {
      debug: [],
      info: [],
      warning: [],
      error: []
    },
    displayMessage: displayMessage
  };
  return service;

  function displayMessage (message, messageType) {
    service.messages[messageType].push(message);
  }
}

注意:将消息类型替换为您的