2014-12-03 53 views
0

我有一个Angular Factory,它在屏幕上创建全局警报,但用 创建警报错误“TypeError:undefined不是函数”错误。在Angular工厂中未定义“this”

我厂是:

'use strict'; 
angular.module('meanstackStarterApp') 
    .factory('Alerts', function ($timeout) { 

    var alertType = null; 
    var alertTitle = null; 
    var alertMessage = null; 

    return { 
     setMessage: function(type, title, message, timed) { 
      console.log("in"); 
      this.alertType = type; 
      this.alertTitle = title; 
      this.alertMessage = message; 
      if (type == "alert-danger") 
      { 
       alertMessage = message + alertMessages.alertMessage_GlobalTryAgain; 
      } 
      if (timed) 
      { 
       // Set Timeout on unset 
       $timeout(this.unsetMessage(),5000); 
      } 
     }, 

     unsetMessage: function() { 
      console.log("out"); 
      this.alertType = null; 
      this.alertTitle = null; 
      this.alertMessage = null;   
     } 
    }; 
    }); 

setMessage功能工作正常,但在thisunsetMessage错误。

如果我从变量中删除this前缀,则代码会在没有错误的情况下运行,但不实际设置工厂变量。

我错过了什么?

+0

this.unsetMessage(本)---为什么你路过这里? – 2014-12-03 12:04:57

+0

'unsetmessage'中的'this'指'unsetmessage','setmessage'中的this'指'setmessage' – 2014-12-03 12:06:37

+0

@PraveenPrasannan这是康乃馨之前的一个尝试解决它的问题......现在编辑。 – 2014-12-03 12:09:01

回答

1

我这里有像你,我改变了你的代码看起来像雷:

angular.module('meanstackStarterApp') 
    .factory('Alerts', function ($timeout) { 
    var self = this; 

    var alertType = null; 
    var alertTitle = null; 
    var alertMessage = null; 


    self.setMessage = function(type, title, message, timed) { 
      console.log("in"); 
      self.alertType = type; 
      self.alertTitle = title; 
      self.alertMessage = message; 
      if (type == "alert-danger") 
      { 
       alertMessage = message + alertMessages.alertMessage_GlobalTryAgain; 
      } 
      if (timed) 
      { 
       // Set Timeout on unset 
       $timeout(self.unsetMessage(this),5000); 
      } 
     }; 

    self.unsetMessage = function() { 
      console.log("out"); 
      self.alertType = null; 
      self.alertTitle = null; 
      self.alertMessage = null;   
     }; 

    return self; 
    });