2015-10-07 119 views
1

我有一個指令來顯示格式化後的JSON文件的內容。指令應該只執行一次

.directive('jsonText', function() { 
return { 
    restrict: 'A', 
    require: 'ngModel', 
    scope: { 
     ngModel: "=" 
    }, 
    link: function(scope, element, attr, ngModel) { 
     update(); 
     function update() { 
      var data = scope.ngModel; 
      console.log(JSON.stringify(attr)+" to ---> "+angular.toJson(data,true)); 
      scope.ngModel = angular.toJson(data,true); 
     } 

    } 
};}); 

我的HTML代碼

<div class="col-md-12"> 
    <textarea ng-model="jsondata" readonly json-text rows="10" name="jsonfile" id="jsonfile" style="resize: none"></textarea> 
</div> 

所以會發生什麼是多步的形式,所以我導航到該代碼多次。

所以第一次達到這個時候,它的格式是正確的。

​​

但第二次發生這樣的事情。

"{\n \"subjectareaname\": \"Defects\",\n \"feedname\": \"Feed for Jira\",\n \"description\": \"Feed for Jira\",\n \"datafeedfor\": \"application\",\n \"name\": \"Log4jphp\"\n}" 

我該如何避免這種情況?有什麼辦法可以強制它只工作一次。

+0

你需要修改綁定數據?如果沒有,你可以得到一個ngModel的副本,然後修改它,因此調用update() – masimplo

+0

無論多少次都沒有關係。如果你希望更新在SPA的整個生命週期內只被調用一次,無論次數多少次您正在導航到包含該指令的頁面,您可以將其移動到鏈接函數之外,進入指令引導時間(如果數據可用) – masimplo

+2

只需使用data | JSON?你也用字符串覆蓋數據對象,所以它會是這樣的。 – YOU

回答

2

這是因爲你在這一行覆蓋你scope.ngModel:

scope.ngModel = angular.toJson(data,true); 

這意味着未來它到來時,該數據實際上將被改變。角已經附帶了你一個很好的JSON過濾器,來完成你在做什麼,你可以有這樣的事情:

<pre>{{ jsonData | json }}</pre> 

你可以看到它的行動在這個小提琴:http://jsfiddle.net/o0d5kdv6/