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

时间:2016-03-19 23:23:09

标签: angularjs undefined angular-services

我无法弄清楚为什么我的消息变量在下面的代码中的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);
  }
}

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

(未在任何地方定义。所以它没有定义。

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

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

这样的行
messages[messageType]

messages[messageType] = []; 初始化为新的空数组。

答案 1 :(得分:1)

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

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

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

注意:用您的消息替换消息类型