2013-07-08 82 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