2013-07-08 83 views
0

我在里面有角的应用和textarea更新NG-模型从转角服务

<textarea id="log_text_area" readonly>{{logger}}</textarea> 

也对我有Logger服务,必须更新此textarea

angular.module('app').factory('Logger', [function(){ 
    var logger = {}; 

    // 
    // Write log 
    // 
    logger.log = function(log_area, arguments){ 
     // get current date 
     var date = new Date(); 
     // log message 
     var message = ''; 

     // traverse object and collect log message 
     for (var i = 0; i < arguments.length; i++) { 
      message += arguments[i] + " "; 
     } 

     console.log(log_area); 

     // check log area 
     if (log_area != undefined){ 
      // log value 
      var value = "[" + date + "}] " + message + "\n"; 
      value += log_area; 
      log_area = value; 
     } 
    }; 

    // return logger 
    return logger; 
}]); 

现在我想从控制器更新我的textarea:

function MyController($scope, Logger) {  
    $scope.logger = ''; 

    Logger.log($scope.logger, 'Logs Logs Logs'); 
} 

但它不会更新。如何从angular服务更新textarea?

谢谢。

+0

您按值传递'$ scope.logger',一个基元。覆盖传递的值对$ scope没有任何作用。 – jpsimons

回答

1

让您的日志函数仅返回文本并将返回的值分配给控制器中的$ scope属性。

$scope.logger = Logger.Log('log, log log'); 

或者您可以拨打$scope.$apply();日志()调用后,但做法头儿更干净。

+0

是的,我知道$ scope。$ apply,但是我想将textarea更新为'Logger'服务。 – 0xAX

+1

服务不应该直接更改范围。其实我不应该说第二种方法,因为这个原因是不恰当的。 – Hippocrates